#include <iostream>
using namespace std;
//题意:求最大一组朋友的人的个数,要求:只能为1或者该组中所有人都是互为(间接的或者直接的)朋友
//思路:并差集
#define NSIZ 10000010
int parent[NSIZ];
int myrank[NSIZ];
void make_set(int n)
{
int i;
for(i = 0;i < n; ++i)
{
parent[i] = i;
myrank[i] = 1;
}
}
int find_set(int x)
{
if(x != parent[x])
{
parent[x] = find_set(parent[x]);
}
return parent[x];
}
void union_set(int x, int y)
{
x = find_set(x), y = find_set(y);
if(x != y)
{
if(myrank[x] < myrank[y])
{
parent[x] = y;
myrank[y] += myrank[x];
}
else
{
parent[y] = x;
myrank[x] += myrank[y];
}
}
}
int main()
{
int n, m;
int i, j, x, y, fx, fy;
int len, sum;
while(scanf("%d", &n) != EOF )
{
if(!n)
{
printf("1\n");
continue;
}
make_set(NSIZ);
for(i = 0;i < n; ++i)
{
scanf("%d %d", &x, &y);
union_set(x, y);
}
sum = 0;
for(i = 1;i < NSIZ; ++i)
{
if(sum < myrank[i])
{
sum = myrank[i];
}
}
printf("%d\n", sum);
}
return 0;
}
hdu1856More is better【并差集】
最新推荐文章于 2015-08-12 08:57:56 发布