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\n",k++,cnt);
	}
	return 0;
}

 

posted @ 2019-02-20 09:48  xyee  阅读(146)  评论(0编辑  收藏  举报