求最大节点数即可
详细见代码:
hdoj 1856 More is better 【并查集 求最大节点数】
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int pre[10000000+100];
int vis[10000000+100];
int sum=0;
void init(int n)
{
int i;
for(i=0;i<=10000010;i++)
{
pre[i]=i;
vis[i]=1;
}
}
int findd(int x)
{
int r=x;
while(r!=pre[r])
r=pre[r];
int i=x,j;
while(i!=r)
{
j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
void bing(int x,int y)
{
int tx=findd(x);
int ty=findd(y);
if(tx!=ty)
{
pre[ty]=tx;
vis[tx]+=vis[ty];
sum=max(sum,vis[tx]);
}
}
int main ()
{
int n;
while(~scanf("%d",&n))
{
if(n==0)
{
printf("1\n");
continue;
}
init(n);
sum=0;
while(n--)
{
int xx,yy;
scanf("%d%d",&xx,&yy);
bing(xx,yy);
}
cout<<sum<<endl;
}
}