题目大意:
N个人两两互为朋友,朋友的朋友也是朋友,找到一个最大的团体这个团体里面的人都互为朋友,然后输出。
解题思路:
这道题用的其实就是并查集的基本操作,输出一个最大的集合即可。
#include
#define N 10000005
int fa[N],num[N],ans;
void initi()
{
int i;
for(i=0;i<=N;i++)
{
fa[i]=i;
num[i]=1;
}
ans=1;
}
int getFa(int x)
{
int i,j;
i=j=x;
while(i!=fa[i])
i=fa[i];
while(x!=fa[x]){
j=x;
x=fa[x];
fa[j]=i;
}
return i;
}
void add(int a,int b)
{
int x,y;
x=getFa(a);
y=getFa(b);
if(x!=y){
ans=ans>(num[x]+num[y])?ans:(num[x]+num[y]);
if(num[x]>num[y]){
fa[y]=x;
num[x]+=num[y];
}else{
fa[x]=y;
num[y]+=num[x];
}
}
}
int main()
{
int n,a,b;
while(scanf("%d",&n)!=EOF)
{
initi();
while(n--){
scanf("%d%d",&a,&b);
add(a,b);
}
printf("%d\n",ans);
}
return 0;
}