rt,我这个应该是能到 60 pts 的。
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int n,m,q,r,c,a[N][2005];
int l[N];
bool f[12][1005][2005];
set<int> st;
int cnt;
void solve(){
st.clear();
memset(f,0,sizeof f);
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>l[i];
for(int j=1;j<=l[i];j++){
cin>>a[i][j];
st.insert(a[i][j]);
}
}
vector<int> v;
for(auto x:st) v.push_back(x);
for(int i=1;i<=n;i++){
for(int j=1;j<=l[i];j++) a[i][j]=lower_bound(v.begin(),v.end(),a[i][j])-v.begin()+1;
}
for(int i=1;i<=n;i++){
for(int k=1;k<=l[i];k++){
if(a[i][k]==1){
for(int j=2;j<=m&&j+k-1<=l[i];j++) f[1][i][a[i][j+k-1]]=1;
}
}
}
for(int i=1;i<=10;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=l[j];k++){
for(int u=1;u<=n;u++){
if(u==j) continue;
vector<int> vec;
for(int v=1;v<=l[u];v++){
if(a[j][k]==a[u][v]) vec.emplace_back(v);
}
for(auto x:vec){
for(int o=2;o<=m&&x+o-1<=l[u];o++)
f[i+1][u][a[u][x+o-1]]|=f[i][j][a[j][k]];
}
}
}
}
}
while(q--){
++cnt;
cin>>r>>c;
auto it=lower_bound(v.begin(),v.end(),c);
if(*it!=c||it==v.end()){
cout<<0<<'\n';
continue;
}
c=it-v.begin()+1;
int ans=0;
for(int i=1;i<=n;i++) ans|=f[r][i][c];
cout<<ans<<'\n';
}
}
signed main(){
// freopen("chain4.in","r",stdin);
// freopen("chain4.out","w",stdout);
int t;
cin>>t;
while(t--) solve();
return 0;
}