点击此处打开原题链接: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;
}