题目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;
}
#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;
}
相关文章推荐
- 题目1444:More is better
- 【九度OJ】题目1444:More is better 解题报告
- Jobdu 题目1444:More is better
- 九度 题目1444:More is better
- 题目1444:More is better
- 九度 题目1444:More is better
- 九度考研机试教程 67-题目1444:More is better
- 题目1444:More is better
- 【九度】题目1444:More is better
- 题目1444:More is better
- 九度 题目1444:More is better
- 九度OJ1444:More is better
- 题目67:More is better
- 九度OJ-1444:More is better(用并查集求集合大小)
- 九度 OJ 1444:More is better
- 并查集模板题 HDU1856 More is better
- HDU-1856 More is better
- hdoj problem 1856 More is better(并查集||动态规划)
- HDU 1856 More is better (并查集合并)
- hdu 1856 more is better