交了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;
}