#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 并查序 特殊优化
最新推荐文章于 2019-04-11 13:07:59 发布
本文介绍了一种基于并查集的数据结构实现方法,并通过优化查找过程中的路径压缩来提高效率。具体展示了如何使用该数据结构处理一系列节点合并操作,并在每次合并后找到当前最大集合的大小。
946

被折叠的 条评论
为什么被折叠?



