并查集 求最大的集合里元素个数
貌似方法有很多。。
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
#define ll __int64
using namespace std;
int r[10000005],vis[10000005],ans;
int root(int a)
{
if(r[a]==a) return a;
else return r[a]=root(r[a]);
}
void merge(int a,int b)
{
int ra,rb;
ra=root(a);
rb=root(b);
if(ra==rb) return;
if(ra<rb)
{
r[rb]=ra;
vis[ra]+=vis[rb];
ans=max(ans,vis[ra]);
}
else
{
r[ra]=rb;
vis[rb]+=vis[ra];
ans=max(ans,vis[rb]);
}
}
int main()
{
int n,i,a,b,m;
while(~scanf("%d",&n))
{
if(n==0)
{
printf("1\n");
continue;
}
for(i=0;i<10000005;i++)
{
vis[i]=1;
r[i]=i;
}
ans=1;
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
merge(a,b);
}
printf("%d\n",ans);
}
return 0;
}