#include <stdio.h>
#include<string.h>
int c[10000005],k[10000005];
int find(int x)
{
int y = x;
while(x!=c[x])
x=c[x];
c[y] = x;//如果没有这一步,就会超时。 对于很大的树,这是一个非常优秀的优化
return x;
}
int main()
{
int n,m,i,a,b,p,q;
while(scanf("%d",&n)!=EOF)
{
m=1;
for(i=1;i<=10000000;i++)
{ c[i]=i ;k[i]=1; }
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
p = find(b); q = find(a);
if(p == q) continue;
k[p]=k[q]+k[p];
c[q]=p;
if(m<k[p])m=k[p];
}
printf("%d\n",m);
}
return 0;
}
hdu 1856 并查序 特殊优化
最新推荐文章于 2020-04-30 15:13:08 发布