70-85 pts求调
查看原帖
70-85 pts求调
638059
jason_jason楼主2025/1/14 16:58

交了4次,分数波动,除#13之外都至少过了一次 https://www.luogu.com.cn/record/198203549 https://www.luogu.com.cn/record/198202183 https://www.luogu.com.cn/record/198202058 https://www.luogu.com.cn/record/198201955

#include<bits/stdc++.h>
using namespace std;
vector<int> vec[100001];
int l[100001],dp[200001][101],r[100001],c[100001];
int main() {
	int T; cin>>T;
	while(T--)
	{
		int n,k,q,maxl=-1,maxr=-1;
		cin>>n>>k>>q;
		for(int i=1;i<=n;i++)
		{
			vec[i].clear();
			scanf("%d",&l[i]);
			for(int j=1;j<=l[i];j++) 
			{
				int tmp; 
				scanf("%d",&tmp);
				maxl=max(maxl,tmp);
				vec[i].push_back(tmp); 
			}
		}
		for(int i=1;i<=q;i++)
		{
			scanf("%d%d",&r[i],&c[i]);
			maxr=max(maxr,r[i]);
		}
		for(int i=0;i<=maxr;i++)
		for(int j=0;j<=maxl;j++)
		dp[j][i]=-1;
		dp[1][0]=0;
		for(int i=1;i<=maxr;i++)
		{
			for(int j=1;j<=n;j++)
			{
				int x=-1;
				for(int k1=0;k1<vec[j].size();k1++)
				{
					int t1=vec[j][k1];
					if(x<=k1-k) x=-1;
					if(x!=-1)
					{
						if(dp[t1][i]==-1) dp[t1][i]=j;
						else if(dp[t1][i]!=j) dp[t1][i]=0;
					}
					if(dp[t1][i-1]!=-1 and dp[t1][i-1]!=j) x=k1;
				}
			}
		}
		for(int i=1;i<=q;i++)
		{
			if(c[i]>maxl or dp[c[i]][r[i]]==-1) printf("0\n");
			else printf("1\n");
		}
	}
	return 0;
}
2025/1/14 16:58
加载中...