PAT (Advanced Level) Practice 1118 Birds in Forest (25 分)
阿新 • • 發佈:2018-12-07
並查集
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e4+5;
int f[N];
int Find(int x)
{
return f[x]==x?x:f[x]=Find(f[x]);
}
int main()
{
int n;scanf("%d",&n);
for(int i=1;i<N;i++) f[i]=i;
int m=1;
for(int i=1;i<=n;i++)
{
int k;scanf("%d",&k);
int y=-1;
while(k--)
{
int x;scanf("%d",&x);
if(y==-1) y=x;
int fx=Find(x),fy=Find(y);
if(fx!=fy) f[fx]=fy;
m=max(m,x);
}
}
int cnt=0;
for(int i=1;i<=m;i++)
{
Find (i);
if(f[i]==i) cnt++;
}
printf("%d %d\n",cnt,m);
int q;scanf("%d",&q);
while(q--)
{
int x,y;
scanf("%d%d",&x,&y);
int fx=Find(x),fy=Find(y);
if(fx==fy) puts("Yes");
else puts("No");
}
return 0;
}