您的位置:首页 > 其它

题目1444:More is better

2014-03-12 09:59 295 查看
// 求并查集中集合中元素的个数。。。

#include<stdio.h>

#define N 10000001

int Tree
;

int sum
; // 以结点i为根的树的结点个数,仅当Tree[i]=-1时有效

int findRoot(int x){ // 查找结点x所在树的根结点,并查集

if(Tree[x]==-1) return x;

else{

int tmp=findRoot(Tree[x]);

Tree[x]=tmp;

return tmp;

}

}

int main()

{

int n;

while(scanf("%d",&n)!=EOF){

for(int i=1;i<=N;i++){ // 初始化结点信息

Tree[i]=-1; sum[i]=1; // 所有节点为孤立集合,元素个数为1

}

while(n--){

int a,b;

scanf("%d%d",&a,&b);

a=findRoot(a); b=findRoot(b);

if(a!=b) {

Tree[a]=b;

sum[b]+=sum[a]; // 合并两个集合时,将子树的根结点所在集合的结点个数累加到新树的树根

}

}

int ans=1; // 答案至少为1

for(int i=1;i<=N;i++){

if(Tree[i]==-1 && sum[i]>ans) ans=sum[i]; // 统计最大值

}

printf("%d\n",ans);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: