#include <stdio.h>
//求并查集,元素最多的集合
struct node
{
int a,b;
}arr[100002];
int father[10000002],rank[10000002];
int find(int x)
{
if(father[x]!=x)
father[x]=find(father[x]);
return father[x];
}
int main()
{
int n,i,ans;
while(scanf("%d",&n)!=EOF)
{
int MAXNUM=1;
ans=0;
for (i=1;i<=n;i++)
{
scanf("%d %d",&arr[i].a,&arr[i].b);
if(arr[i].a>MAXNUM)
MAXNUM=arr[i].a;
else if(arr[i].b>MAXNUM)
MAXNUM=arr[i].b;
}
for (i=1;i<=MAXNUM;i++)
{
father[i]=i;
rank[i]=1;//每个集合元素个数,或深度
}
for (i=1;i<=n;i++)
{
int x=find(arr[i].a);
int y=find(arr[i].b);
if(x!=y)
{
father[x]=y;
rank[y]+=rank[x];
}
}
for(i=1;i<=MAXNUM;i++)
{
if(father[i]==i)
if(rank[i]>ans)
ans=rank[i];
}
printf("%d\n",ans);
}
return 0;
}
hdu1856 More is better
最新推荐文章于 2021-05-23 22:36:57 发布