HDU1856 More is better(并查集)

题意:

王老师要找一些男生帮助他完成一项工程。要求最后挑选出的男生之间都是朋友关系,可以说直接的,也可以是间接地。问最多可以挑选出几个男生(最少挑一个)。

要点:

并查集水题,只要求那个集合中个数最大即可,就是数据比较大,所以rank数组就不开了。


16698903 2016-03-28 11:24:07 Accepted 1856 374MS 79996K 661 B C++ seasonal
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxn 10000000
int p[maxn], num[maxn];

void init()
{
	for (int i = 1; i <= maxn; ++i)
	{
		p[i] = i;
		num[i] = 1;
	}
}
int find(int x)
{
	if (p[x] == x) return x;
	return p[x] = find(p[x]);
}
void merge(int x, int y)
{
	x = find(x);
	y = find(y);
	if (x == y) return;
	p[x] = y;
	num[y] += num[x];
}

int main()
{
	int n,x,y;
	while (scanf("%d", &n) != EOF)
	{
		init();
		while (n--)
		{
			scanf("%d%d", &x, &y);
			merge(x, y);
		}
		int max = -1;
		for (int i = 1; i <= maxn; i++)
			if (num[i] > max)
				max = num[i];
		printf("%d\n", max);
	}
}


posted @ 2016-03-28 11:28  seasonal  阅读(90)  评论(0编辑  收藏  举报