hdu1856 More is better 并查集

#include<iostream>
#include<cstdio>
#define Maxn 10000005
int father[Maxn],num[Maxn];
void init()
{   for(int i=1;i<=Maxn;i++)
    {
        father[i]=i;
        num[i]=1;
    }
}
int getf(int x)
{   if(x!=father[x])
    father[x]=getf(father[x]);
    return father[x];

}
void Union(int x,int y)
{     x=getf(x);
      y=getf(y);
    if(x!=y)
    {
        father[x]=y;
        num[y]+=num[x];
    }
}
int main()
{   int n,a,b,i,max;
    while(~scanf("%d",&n))
    {
    if(n==0)
    {printf("1\n");
    continue;
    }
    max=0;
    init();
    for( i=0;i<n;i++)
    {scanf("%d%d",&a,&b);
    if(a>max)
    max=a;
    if(b>max)
    max=b;
    Union(a,b);
    }
    int Max=0;
    for( i=1;i<=max;i++)
        if(num[i]>Max)
            Max=num[i];
    printf("%d\n",Max);
    }
    return 0;
}


你可能感兴趣的:(并查集)