POJ 2524 Ubiquitous Religions 并查集
2015-08-25 15:54
344 查看
Ubiquitous Religions
Description
There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in finding out how many different religions students in your university believe in.
You know that there are n students in your university (0 < n <= 50000). It is infeasible for you to ask every student their religious beliefs. Furthermore, many students are not comfortable expressing their beliefs. One way to avoid these problems is to ask
m (0 <= m <= n(n-1)/2) pairs of students and ask them whether they believe in the same religion (e.g. they may know if they both attend the same church). From this data, you may not know what each person believes in, but you can get an idea of the upper bound
of how many different religions can be possibly represented on campus. You may assume that each student subscribes to at most one religion.
Input
The input consists of a number of cases. Each case starts with a line specifying the integers n and m. The next m lines each consists of two integers i and j, specifying that students i and j believe in the same religion. The students are numbered 1 to n. The
end of input is specified by a line in which n = m = 0.
Output
For each test case, print on a single line the case number (starting with 1) followed by the maximum number of different religions that the students in the university believe in.
Sample Input
Sample Output
Hint
Huge input, scanf is recommended.
Source
Alberta Collegiate Programming Contest 2003.10.18
Time Limit: 5000MS | Memory Limit: 65536K | |
Total Submissions: 27741 | Accepted: 13588 |
There are so many different religions in the world today that it is difficult to keep track of them all. You are interested in finding out how many different religions students in your university believe in.
You know that there are n students in your university (0 < n <= 50000). It is infeasible for you to ask every student their religious beliefs. Furthermore, many students are not comfortable expressing their beliefs. One way to avoid these problems is to ask
m (0 <= m <= n(n-1)/2) pairs of students and ask them whether they believe in the same religion (e.g. they may know if they both attend the same church). From this data, you may not know what each person believes in, but you can get an idea of the upper bound
of how many different religions can be possibly represented on campus. You may assume that each student subscribes to at most one religion.
Input
The input consists of a number of cases. Each case starts with a line specifying the integers n and m. The next m lines each consists of two integers i and j, specifying that students i and j believe in the same religion. The students are numbered 1 to n. The
end of input is specified by a line in which n = m = 0.
Output
For each test case, print on a single line the case number (starting with 1) followed by the maximum number of different religions that the students in the university believe in.
Sample Input
10 9 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 10 4 2 3 4 5 4 8 5 8 0 0
Sample Output
Case 1: 1 Case 2: 7
Hint
Huge input, scanf is recommended.
Source
Alberta Collegiate Programming Contest 2003.10.18
#include <cstdio> #include <cstring> #include <iostream> #define maxn 50000+5 using namespace std; int set[maxn],n,m,cnt; inline int set_find(int t){ if(set[t]<0) return t; else return set_find(set[t]); } void join(int x,int y){ int a,b; a=set_find(x); b=set_find(y); if(a==b) return ; cnt--; set[a]=b; } int main(){ int x,y; int count=1; while(scanf("%d%d",&n,&m)&&(n||m)){ for(int i=1;i<=n;++i)set[i]=-1; cnt=n; while(m--){ scanf("%d%d",&x,&y); join(x,y); } printf("Case %d: %d\n",count++,cnt); } return 0; }
相关文章推荐
- [leetcode] 95.Unique Binary Search Trees II
- UILabel设置圆角和背景
- 外来人员如何发起流程与参与内部流程?CCFlow中Guest流程说明
- 回顾交互设计史:回归人性,重拾质朴
- POJ - 2524 Ubiquitous Religions(简单并查集)
- Repository 返回 IQueryable?还是 IEnumerable?
- HDU 1159 Common Subsequence
- uestc 250 windy数(数位dp)
- 外来人员如何发起流程与参与内部流程?CCFlow中Guest流程说明
- BUILD
- UE4引擎学习
- fuel自动安装openstack文档
- 【工具】 原版完美激活 Flash builder 4.7 【非破解激活】
- 关于listview item 子控件焦点的问题。
- 科室管理系统中,运用百度编辑器(ueditor1_4_3-utf8-jsp)出现的一系列问题!
- Android消息处理机制——Looper,Handler,Message,MessageQueue,Thread
- 分析公式 Codeforces 528B Clique Problem
- easyui datebox多条件验证
- 【java】队列、优先队列、双端队列Deque、链表LinkedList、阻塞队列(Blocking queue)
- 如何设置UILable的各种属性