4 1 2 3 4 5 6 1 6 4 1 2 3 4 5 6 7 8
4 2
题目大意: 给出若干对朋友,朋友的朋友也是朋友,求出哪一个朋友圈的人数最多。
思路: 并查集。另开一个数组保存每个朋友圈的人数保存在祖先里,初始化为为1,(因为一开始每个集合只有一个人),当两个集合合并的时候把一个朋友圈祖先的人数加到另一个祖先人数上。找出最大值即可。
#include<stdio.h>
int n,_max,fa[10000005],num[10000005];
int Find(int x)
{
return x==fa[x]?x:fa[x]=Find(fa[x]);
}
int main()
{
while(~scanf("%d",&n)) {
for(int i=1;i<=10000005;i++)
fa[i]=i,num[i]=1;
_max=1;
for(int i=1;i<=n;i++) {
int x,y,fx,fy;
scanf("%d%d",&x,&y);
fx=Find(x),fy=Find(y);
if(fx != fy) {
num[fy]+=num[fx];
fa[fx]=fy;
if(num[fy]>_max) _max=num[fy];
}
}
printf("%d\n",_max);
}
return 0;
}
HDU 1856 More is better,布布扣,bubuko.com
原文:http://blog.csdn.net/u013923947/article/details/24364913