题意:给出n对朋友,求出最大的朋友圈。
注意n=0时,只有一个人,所以输出1。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 10000001
using namespace std;
int pre[N],maxn,ans,sum[N];
void init()
{
ans=maxn=0;
for(int i=0;i<N;i++) pre[i]=i,sum[i]=1;
}
int findset(int v)
{
int t1,t2=v;
while(v!=pre[v]) v=pre[v];
while(pre[t2]!=v)
{
t1=pre[t2];
pre[t2]=v;
t2=t1;
}
return v;
}
void unions(int u,int v)
{
int t1=findset(u);
int t2=findset(v);
if(t1!=t2)
{
pre[t1]=t2;
sum[t2]+=sum[t1];
}
}
int main()
{
int m;
while(~scanf("%d",&m))
{
if(m==0)
{
cout<<1<<endl;
continue;
}
init();
for(int i=0;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
maxn=max(maxn,max(u,v));
unions(u,v);
}
for(int i=1;i<=maxn;i++) ans=max(ans,sum[i]);
cout<<ans<<endl;
}
}