大神求助,本地没问题,交洛谷就CE
#include<bits/stdc++.h>
using namespace std;
int n,r,p;
int t;
int cs,end;
bool f;
int f1;
int a[2010][2010];
int f2[2010][2010];
void dfs(int x,int y) {
if(x==cs&&y==end){
f=1;
return ;
}
if(x>cs)
return ;
if(f==1)
return ;
for(int i=1;i<=n;i++){
if(f1!=i)
for(int j=1;j<=a[i][0];j++){
if(a[i][j]==y){
for(int len=1;len<r;len++){
if(f2[i][j+len]<=min(50,n-1)&&j+len<=a[i][0]){
f1=i;
f2[i][j+len]++;
dfs(x+1,a[i][j+len]);
f2[i][j+len]--;
}
}
}
}
}
}
int main() {
cin>>t;
while(t--) {
cin>>n>>r>>p;
for(int i=1; i<=n; i++) {
cin>>a[i][0];
for(int j=1; j<=a[i][0]; j++) {
scanf("%d",&a[i][j]);
}
}
while(p--) {
memset(f2,0,sizeof(f2));
f=0;
f1=0;
cin>>cs>>end;
if(n==1&&cs!=1)
f=0;
else
dfs(0,1);
printf("%d\n",f);
}
}
return 0;
}