题意:10000000个男生中,直接或间接认识的为一个群体,Mr Wang要选尽可能多的认识的男生,
求最多能选的男生个数为多少,即求最大的群体个数为多少
#include<stdio.h>
#define N 10000000
int f[N+10],t[N+10];
int find(int a)
{
if(a!=f[a])
f[a]=find(f[a]);
return f[a];
}
void mix(int a,int b)
{
int x,y;
x=find(a);
y=find(b);
if(x!=y)
f[x]=y;
}
int main()
{
int i,k,m,a,b;
while(scanf("%d",&m)!=EOF){
for(i=1;i<=N;i++){
f[i]=i;
t[i]=0;
}
for(i=1;i<=m;i++){
scanf("%d%d",&a,&b);
mix(a,b);
}
for(i=1;i<=N;i++)
t[find(i)]++; //计算相同祖先的群体里的人数
k=1;
for(i=1;i<=N;i++) //计算最大值
if(t[i]>k)
k=t[i];
printf("%d\n",k);
}
return 0;
}