暴力,求调!
查看原帖
暴力,求调!
773805
wsm52楼主2024/10/29 21:53
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10; 
int t,n,k,q;
int l[N],s[N*2];
int r,c;
bool dfs(int x,int last,int num){
	if(num==r) return last==c?1:0;
	for(int i=1;i<=n;i++){
		if(i==x) continue;
		for(int j=l[i-1]+1;j<=l[i];j++){
			if(s[j]==last){
				for(int z=j+1;z<=l[i-1]+k&&z<=l[i];z++){
					if(dfs(i,s[z],num+1)) return true;
				}
			}
		}
	}
	return false;
}
int main(){
	scanf("%d",&t);
	while(t--){
		int d;
		scanf("%d%d%d",&n,&k,&q);
		for(int i=1;i<=n;i++){
			scanf("%d",&d);
			l[i]=l[i-1]+d;
			for(int j=l[i-1]+1;j<=l[i];j++) scanf("%d",&s[j]);
		}
		while(q--){
			scanf("%d%d",&r,&c);
			bool flag=false;
			for(int i=1;i<=n;i++){
				for(int j=l[i-1]+2;j<=l[i]&&j<=l[i-1]+k;j++){
					flag=dfs(i,s[j],1);
					if(flag) break;
				}
				if(flag) break;
			}
			if(flag) printf("1\n");
			else printf("0\n");
		}
	}
	return 0;
}
2024/10/29 21:53
加载中...