首页 > 其他 > 详细

poj2524 Ubiquitous Religions

时间:2017-11-30 23:13:56      阅读:314      评论:0      收藏:0      [点我收藏+]

题目链接

http://poj.org/problem?id=2524

题意

有n个学生,编号1~n,每个学生最多有1个宗教信仰,输入m组数据,每组数据包含a、b,表示同学a和同学b有相同的信仰,求在n名学生中最多存在多少种不同的宗教信仰。

思路

使用并查集解决。

代码

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 const int N = 50000 + 10;
 7 int p[N];
 8 
 9 void make_set(int n)
10 {
11     for (int i = 1;i <= n;i++)
12         p[i] = -1;
13 }
14 
15 int find_root(int i)
16 {
17     if (p[i] == -1)
18         return i;
19     else
20     {
21         int temp = find_root(p[i]);        //路径压缩
22         p[i] = temp;
23         return temp;
24     }
25 }
26 
27 void union_set(int a, int b)
28 {
29     int ra = find_root(a);
30     int rb = find_root(b);
31     if (ra != rb)
32         p[ra] = rb;
33 }
34 
35 int main()
36 {
37     //freopen("poj2524.txt", "r", stdin);
38     int n, m;
39     int cnt = 0;
40     while (scanf("%d%d", &n, &m) == 2 && n)
41     {
42         make_set(n);
43         int a, b;
44         for (int i = 0; i < m; i++)
45         {
46             scanf("%d%d", &a, &b);
47             union_set(a, b);
48         }
49         int ans = 0;
50         for (int i = 1;i <= n;i++)
51             if (p[i] == -1) ans++;
52         printf("Case %d: %d\n", ++cnt, ans);
53     }
54     return 0;
55 }

 

poj2524 Ubiquitous Religions

原文:http://www.cnblogs.com/sench/p/7932187.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!