POJ-2524-Ubiquitous Religions

这题是并查集,然后没有什么弯弯绕。

#include <cstdio>
const int maxn=50005;
int pre[maxn];

int find(int x)
{
	if (pre[x]==x)
		return x;
	return pre[x]=find(pre[x]);
}

void unions(int a,int b)
{
	int x=find(a);
	int y=find(b);
	if (x!=y)
		pre[x]=y;
}

int main()
{
	int n,m,a,b,k=1;
	while (scanf("%d%d",&n,&m)&&m+n) {
		for (int i=0;i<=n;i++) {
			pre[i]=i;
		}
		while (m--) {
			scanf("%d%d",&a,&b);
			unions(a,b);
		}
		int cnt=0;
		for (int i=1;i<=n;i++) {
			if (pre[i]==i)
				cnt++;
		}
		printf("Case %d: %d
",k++,cnt);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/xyqxyq/p/10404799.html