15,447
社区成员




#include <stdio.h>
#define MM 10000009
int a[MM];
int b[MM];
int find(int x)
{
if(a[x]==x)
return x;
else
return a[x]=find(a[x]);////////递归调用找到根节点
}
int umax;
void hb(int x,int y)
{
x=find(x);
y=find(y);
if(b[x]<b[y])
{
a[x]=y;
b[y]+=b[x];
if(b[y]>umax)
umax=b[y];///////////////用来当前记录最大值
}
else
{
a[y]=x;
b[x]+=b[y];
if(b[x]>umax)
umax=b[x];
}
}
int main()
{
int i,j,k,m,n;
while(scanf("%d",&k)!=EOF)
{
if(k==0)
{
printf("1\n");
continue;
}
for(i=1;i<MM;i++)
{
a[i]=i;
b[i]=1;
}
umax=1;
for(i=0;i<k;i++)
{
scanf("%d%d",&m,&n);
if(m!=n)
hb(m,n);
}
printf("%d\n",umax);
}
return 0;
}
void hb(int x,int y)
{
x=find(x);
y=find(y);
if (x != y)
{
if(b[x]<b[y]) //新加条件
{
a[x]=y;
b[y]+=b[x];
if(b[y]>umax)
umax=b[y];///////////////用来当前记录最大值
}
else
{
a[y]=x;
b[x]+=b[y];
if(b[x]>umax)
umax=b[x];
}
}
}