poj1611---The Suspects
The Suspects
Time Limit: 1000MS |
Memory Limit: 20000K |
|
---|---|---|
Total Submissions: 19754 |
Accepted: 9576 |
Description
Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize transmission to others, the best strategy is to separate the suspects from others. In the Not-Spreading-Your-Sickness University (NSYSU), there are many student groups. Students in the same group intercommunicate with each other frequently, and a student may join several groups. To prevent the possible transmissions of SARS, the NSYSU collects the member lists of all student groups, and makes the following rule in their standard operation procedure (SOP). Once a member in a group is a suspect, all members in the group are suspects. However, they find that it is not easy to identify all the suspects when a student is recognized as a suspect. Your job is to write a program which finds all the suspects.
Input
The input file contains several cases. Each test case begins with two integers n and m in a line, where n is the number of students, and m is the number of groups. You may assume that 0 < n <= 30000 and 0 <= m <= 500. Every student is numbered by a unique integer between 0 and n−1, and initially student 0 is recognized as a suspect in all the cases. This line is followed by m member lists of the groups, one line per group. Each line begins with an integer k by itself representing the number of members in the group. Following the number of members, there are k integers representing the students in this group. All the integers in a line are separated by at least one space. A case with n = 0 and m = 0 indicates the end of the input, and need not be processed.
Output
For each case, output the number of suspects in one line.
Sample Input
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 5
5 1 2 3 4 5
1 0
0 0
Sample Output
4
1
1
Source
并查集
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #define maxn 30000
4 int n,m;
5 int father[maxn],rank[maxn];
6 void init()
7 {
8 for(int i=0;i<n;i++)
9 {
10 father[i]=i;
11 rank[i]=1;
12 }
13 }
14 int setfind(int x)
15 {
16 if(x!=father[x])
17 x=setfind(father[x]);
18 return x;
19
20 }
21 void _union(int a,int b)
22 {
23 a=setfind(a);
24 b=setfind(b);
25 if(a!=b)
26 {
27 if(rank[a]<rank[b])
28 {
29 father[a]=b;
30 rank[b]+=rank[a];
31 }
32 else
33 {
34 father[b]=a;
35 rank[a]+=rank[b];
36 }
37 }
38 }
39 int main()
40 {
41 int a,b,c;
42 while(scanf("%d%d",&n,&m),m+n)
43 {
44 init();
45 while(m--)
46 {
47 scanf("%d %d",&a,&b);
48 while(a>1)
49 {
50 scanf("%d",&c);
51 _union(b,c);
52 b=c;
53 a--;
54 }
55 }
56 printf("%dn",rank[setfind(0)]);
57 }
58
59 return 0;
60 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Open3d 学习计划—13(Azure Kinect)
- 头条面试题:计算目录树的深度
- /etc/passwd文件和/etc/shadow文件
- docker_进阶
- [前端] 设定为disabled的表单域值不能被提交
- 工厂方法模式
- 原创 | 这道题codeforces的简单题差点做了我一下午,你能解出来吗?
- OpenCV4 部署DeepLabv3+模型
- 使用OpenCV实现哈哈镜效果
- 如何使用OpenCV在Python中访问IP摄像头
- 分享我学习Pandas使用的资料,可能是新手入门Pandas最好的教程!
- 原创 | Git入门教程,详解Git文件的四大状态
- 原创 | ACMer不得不会的线段树,究竟是种怎样的数据结构?
- dplyr包summarize的使用
- Mysql的binlog和relay-log到底长啥样?