1. 程式人生 > >PAT (Advanced Level) Practice 1118 Birds in Forest (25 分)

PAT (Advanced Level) Practice 1118 Birds in Forest (25 分)

並查集

#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; }