并查集题目
来源:互联网 发布:爱知流量计 编辑:程序博客网 时间:2024/05/16 10:00
严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁。为了减少传播给别人的机会, 最好的策略是隔离可能的患者。
在Not-Spreading-Your-Sickness大学( NSYSU), 有许多学生团体。同一组的学生经常彼此相通,一个学生可以同时加入几个小组。为了防止非典的传播,NSYSU收集了所有学生团体的成员名单。他们的标准操作程序(SOP)如下:
一旦一组中有一个可能的患者, 组内的所有成员就都是可能的患者。
然而,他们发现当一个学生被确认为可能的患者后不容易识别所有可能的患者。你的工作是编写一个程序,发现所有可能的患者。
Input
输入文件包含多组数据。
对于每组测试数据:
第一行为两个整数n和m, 其中n是学生的数量,m是团体的数量。0 < n <=30000,0 <= m <=500。
每个学生编号是一个0到n-1之间的整数,一开始只有0号学生被视为可能的患者。
紧随其后的是团体的成员列表,每组一行。
每一行有一个整数k,代表成员数量。之后,有k个整数代表这个群体的学生。一行中的所有整数由至少一个空格隔开。
n = m = 0表示输入结束,不需要处理。
Output
对于每组测试数据, 输出一行可能的患者。
Sample Input
100 42 1 25 10 13 11 12 142 0 12 99 2200 21 55 1 2 3 4 51 00 0
Sample Output
411思路:寻找根为零的集合中元素的个数。<span style="font-size:18px;">#include <iostream>#include<stdio.h>#define MAX 30010using namespace std;int pre[MAX];int unionsearch(int root){ int son,tmp; son=root; while(root!=pre[root]) root=pre[root]; while(son!=root) { tmp=pre[son]; pre[son]=root; son=tmp; } return root;}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int ans=0; for(int p=0;p<=n;p++) pre[p]=p; if(m==0&&n==0) break; while(m--) { int k,j; int a[MAX]; scanf("%d",&k); for( j=0;j<k;j++) { scanf("%d",&a[j]); unionsearch(a[j]); int root1,root2; if(j>0) { root1=unionsearch(a[j]); root2=unionsearch(a[j-1]); if(root1>root2) pre[root1]=root2; if(root1<root2) pre[root2]=root1; } } } for(int y=0;y<=n;y++) { if(unionsearch(y)==0) ans++; } printf("%d\n",ans); } return 0;}</span>
1 0
- 并查集题目
- 并查集题目
- 并查集题目推荐
- 并查集题目总结
- poj 并查集题目
- 并查集poj题目
- 【并查集题目总结】
- 并查集的题目
- 并查集经典题目
- 题目 十五 并查集
- POJ并查集题目汇总
- POJ并查集的题目汇总
- hdu 1272 并查集简单题目
- ACM简单题目--并查集
- 题目1012:畅通工程(并查集)
- 并查集的相关题目
- 【九度】并查集题目整理
- POJ并查集的题目汇总
- iOS上线错误(iPad及启动页)
- 添加PCH文件
- java并发之原子性与可见性
- Java自动内存管理机制(三) 对象、引用
- The best linear algebra books
- 并查集题目
- JAVA设计模式----单例模式
- Centos7更改默认网卡为eth
- xpath路径表达式的有关用法
- Request中getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
- Redis和Memcache的区别总结
- The Most Important Algorithms (in CS and Math)
- UML类图的几种关系及类图的代码体现
- sql执行顺序