0pts WA+TLE 求调
查看原帖
0pts WA+TLE 求调
572133
潘德理2010楼主2024/11/4 19:13
#include<bits/stdc++.h>
using namespace std;
int t,n,k,m,l[200010],a,b,r[200010],ps;
int c[200010],ans[200010];
vector<pair<int,pair<int,int> > > q;
vector<int> v[200010],e[200010],d[200010];
inline void ret(){
	for(register int i=1;i<=n;i++){
		for(register int j=0;j<l[i];j++){
			d[i][j]=0;
			int u=v[i][j];
			if(r[u]==-1||(r[u]!=0&&r[u]!=i)){
				e[i][j]=1;
			}
			else e[i][j]=0;
		}
	}
}
inline void rev(){
	for(register int i=1;i<=n;i++){
		for(register int j=0;j<l[i];j++){
			int u=v[i][j],w=e[i][j];
			if(j!=l[i]-1){
				if(w==1) d[i][j+1]=k-1;
				else d[i][j+1]=max(0,d[i][j]-1);
			}
		}
	}
	memset(r,0,sizeof(r));
	memset(c,0,sizeof(c));
	for(register int i=1;i<=n;i++){
		for(register int j=0;j<l[i];j++){
			int u=v[i][j],w=d[i][j];
			if(w>0){
				c[u]=1;
				if(r[u]==0) r[u]=i;
				else if(r[u]!=i) r[u]=-1;
			}
		}
	}
}
int main(){
	freopen("chain.in","r",stdin);
	freopen("chain.out","w",stdout);
	scanf("%d",&t);
	while(t--){
		n=k=m=a=b=ps;
		memset(l,0,sizeof(l));
		memset(r,0,sizeof(r));
		memset(c,0,sizeof(c));
		memset(ans,0,sizeof(ans));
		q.clear();
		scanf("%d%d%d",&n,&k,&m);
		for(register int i=1;i<=n;i++){
			scanf("%d",&l[i]);
			for(register int j=1;j<=l[i];j++){
				scanf("%d",&a);
				v[i].push_back(a);
				e[i].push_back(0);
				d[i].push_back(0);
			}
		}
		for(register int i=1;i<=m;i++){
			scanf("%d%d",&a,&b);
			q.push_back({a,{b,i}});
		}
		sort(q.begin(),q.end());
		memset(r,0,sizeof(r));
		r[1]=-1;
		for(register int i=1;i<=100;i++){
			ret();
			rev();
			for(register int j=ps;j<m;j++){
				int u=q[j].first,v=q[j].second.first,id=q[j].second.second;
				if(i!=u) break;
				ps++;
				if(c[v]==1) ans[id]=1;
				else ans[id]=0;
			}
		}
		for(register int i=1;i<=m;i++){
			printf("%d\n",ans[i]);
		}
		for(register int i=0;i<=n+3;i++){
			v[i].clear(),e[i].clear(),d[i].clear();
		}
	}
	return 0;
}
2024/11/4 19:13
加载中...