题解:用bitset维护每一个数所在的集合,然后计算时,只需要对于两个集合进行与操作,就可以知道答案。
代码如下:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <bitset>
using namespace std;
bitset<1001> a[10100];
int n,m,p,q,x,y;
int main()
{
scanf("%d",&n);
for(int i = 1;i <= n;i++){
scanf("%d",&m);
for(int j= 1;j <= m;j++){
scanf("%d",&p);
a[p].set(i);
}
}
scanf("%d",&q);
for(int i = 1;i <= q;i++){
scanf("%d%d",&x,&y);
int flag = 0;
if((a[x] & a[y]).any())flag = 1;
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}