POJ 2524 Ubiquitous Religions (并查集 II)

点击此处打开原题链接:http://poj.org/problem?id=2524



题目大意:

学校里所有人都信宗教,每个人只能信一种宗教。

输入n个人m组数,每组数代表2个人信的是一种宗教。

问学校里存在多少种宗教。


附AC源代码:

#include <stdio.h>
#define M 50001
int father[M],Array[M];
int find (int x)
{
	if (father[x] != x) father[x] = find(father[x]);
	return father[x];
} 
int main(int argc, char *argv[])
{
	int n,m,a,b,i=0,index;
	while (scanf ("%d%d",&n,&m) != EOF){
		int sum = 0;
		if (n == 0 && m == 0)  break;
		else {
	 		for (index =1; index <= n; ++index){
		 		father[index] = index;
		 		Array[index] =0;
		 	}
				
			for (index =1; index <= m; ++index){
				scanf ("%d%d",&a,&b);
				a = find(a),b = find(b),father[a] = b;
			}
			for (index =1; index <= n; ++index){
				find(index);
				Array[father[index]] = 1;
			}
			for (index =1; index <= n; ++index)
				if (Array[index]) ++sum;
			printf ("Case %d: %d\n",++i,sum);
		}
	}
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值