比赛 |
2025.2.25 |
评测结果 |
WWWWWTWWWWWTTEEETTETETTTT |
题目名称 |
填数游戏 |
最终得分 |
0 |
用户昵称 |
郑霁桓 |
运行时间 |
34.869 s |
代码语言 |
C++ |
内存使用 |
4.30 MiB |
提交时间 |
2025-02-25 11:57:48 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int T,n,m,s[1000006][3],t[1000006][3],p[1000006],p1,p2;
vector<pair<int,int> >v[2005];
vector<int>e[2005];
int dfs(long long x,long long ss){
if(x>n) return 0;
int tp=1,pt=1,sp=-1,pp=-1;
p[0]=1;
if(p[t[x][1]]) tp=0;
if(p[t[x][2]]) pt=0;
for(int i=0;i<v[t[x][1]].size();i++){
if(p[v[t[x][1]][i].first]&&v[t[x][1]][i].second>x) tp=0;
}
if(t[x][2]){
for(int i=0;i<v[t[x][2]].size();i++){
if(p[v[t[x][2]][i].first]&&v[t[x][1]][i].second>x) pt=0;
}
}else pt=0;
if(tp&&pt){
p[t[x][1]]=1,sp=dfs(x+1,ss),p[t[x][1]]=0;
if(sp==-1&&(s[x][2]==t[x][1]||s[x][1]==t[x][1])) ss++;
p[t[x][2]]=1,pp=dfs(x+1,ss),p[t[x][2]]=0;
if(pp==-1&&(s[x][2]==t[x][2]||s[x][1]==t[x][2])) ss++;
if(sp==-1&&pp==-1) return -1;
sp=max(sp,pp);
return ss+sp;
}
if(tp&&!pt){
if(s[x][1]==t[x][1]||s[x][2]==t[x][1]) ss++;
p[t[x][1]]=1,sp=max(sp,dfs(x+1,ss)),p[t[x][1]]=0;
if(sp==-1) return -1;
return ss+sp;
}
if(!tp&&pt){
if(s[x][1]==t[x][2]||s[x][2]==t[x][2]) ss++;
p[t[x][2]]=1,sp=max(sp,dfs(x+1,ss)),p[t[x][2]]=0;
if(sp==-1) return -1;
return ss+sp;
}
return -1;
}
int main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
cin>>T;
while(T--){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>s[i][0];
for(int j=1;j<=s[i][0];j++) cin>>s[i][j];
}
for(int i=1;i<=n;i++){
cin>>t[i][0];
for(int j=1;j<=t[i][0];j++) cin>>t[i][j];
v[t[i][1]].push_back({t[i][2],i});
v[t[i][2]].push_back({t[i][1],i});
}
cout<<dfs(1,0)<<"\n";
}
return 0;
}