POJ 2524 (简单并查集) Ubiquitous Religions

题意:有编号为1到n的学生,然后有m组调查,每组调查中有a和b,表示该两个学生有同样的宗教信仰,问最多有多少种不同的宗教信仰

简单并查集

 

 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 50000 + 10; 
 8 int parent[maxn], n, m;
 9 
10 int GetParent(int x)
11 {
12     return parent[x] == x ? x : parent[x] = GetParent(parent[x]);
13 }
14 
15 void Init(void)
16 {
17     for(int i = 0; i <= n; ++i)
18         parent[i] = i;
19 }
20 
21 int main(void)
22 {
23     #ifdef LOCAL
24         freopen("2524in.txt", "r", stdin);
25     #endif
26 
27     int kase = 0;
28     while(scanf("%d%d", &n, &m) == 2 && (m + n))
29     {
30         Init();
31         for(int i = 0; i < m; ++i)
32         {
33             int a, b;
34             scanf("%d%d", &a, &b);
35             int pa = GetParent(a);
36             int pb = GetParent(b);
37             if(pa != pb)
38                 parent[pa] = pb;
39         }
40         int sum = 0;
41         for(int i = 1; i <= n; ++i)
42             if(parent[i] == i)
43                 ++sum;
44         printf("Case %d: %d\n", ++kase, sum);
45     }
46     return 0;
47 }
代码君

 

posted @ 2014-09-04 09:05  AOQNRMGYXLMV  阅读(176)  评论(0编辑  收藏  举报