POJ 1611 (并查集,按秩合并)
来源:互联网 发布:java预览excel 编辑:程序博客网 时间:2024/06/04 19:29
The Suspects
Time Limit: 1000MS Memory Limit: 20000KTotal Submissions: 30381 Accepted: 14775
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.
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.
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 42 1 25 10 13 11 12 142 0 12 99 2200 21 55 1 2 3 4 51 00 0
Sample Output
411
Source
题解:很明显是并查集,就是基本的按秩合并,使用Rank数组维护树的点的个数
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<string> #include<bitset> #include<utility> #include<functional> #include<iomanip> #include<sstream> #include<ctime> using namespace std; #define N int(1e5) #define inf int(0x3f3f3f3f) #define mod int(1e9+7) typedef long long LL; #ifdef CDZSC #define debug(...) fprintf(stderr, __VA_ARGS__) #else #define debug(...) #endifint fa[N],Rank[N];void init(int n){for(int i=0;i<n;i++){Rank[i]=1;fa[i]=i;}}int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}void unio(int x,int y){x=find(x);y=find(y);if(x!=y){if(Rank[x]>Rank[y]){fa[y]=x;Rank[x]+=Rank[y];}else{fa[x]=y;Rank[y]+=Rank[x];}}} int main() { #ifdef CDZSC freopen("i.txt", "r", stdin); //freopen("o.txt","w",stdout); int _time_jc = clock(); #endif int k,n,m,x,last;while(~scanf("%d%d",&n,&m)){if(n==0&&m==0)break;init(n);while(m--){last=-1;scanf("%d",&k);while(k--){scanf("%d",&x);if(last==-1){last=x;}else{unio(last,x);}}}printf("%d\n",Rank[find(0)]);}#ifdef CDZSC debug("time: %d\n", int(clock() - _time_jc)); #endif return 0; }
0 0
- POJ 1611 (并查集,按秩合并)
- poj 1611 并查集 按数目合并
- poj 1611 The Suspects(启发式式合并,并查集)
- 并查集-按秩合并
- 按秩合并并查集
- 并查集(按秩合并)
- 并查集的按秩合并
- POJ 1182 食物链 (并查集+集合有条件合并)
- 并查集(按秩合并、路径压缩)
- #68 (div.2) B(并查集 按秩合并)
- 并查集入门简略笔记:闲谈按秩合并
- UVA 11354 - Bond(并查集-按秩合并)
- 并查集 按秩合并&路径压缩
- bzoj 4668 冷战 按秩合并并查集
- 历史 (并查集 按秩合并)
- 可撤销并查集模板(按秩合并)
- 并查集 POJ 1611
- 【并查集】POJ-1611
- 模板函数需要将声明和实现放到同一个文件中
- 简单的网页处理工具-HtmlParser
- hdu 1864 最大报销额01背包dp
- Unity小技巧
- poj 2506 Tiling 《大数加法+递推》
- POJ 1611 (并查集,按秩合并)
- iOS 检测版本升级比较好用的第三方类库Harpy的简单使用
- 【HPU】[1736]老王修马路(二)
- 栈的运用(十进制转换八进制,括号匹配问题)
- 扣丁学堂笔记第07天高级UI组件(三)
- 内核态和用户态的区别
- Windows下用VS2013加载caffemodel做图像分类
- matlab 曲线拟合
- Intellj IDEA 启动参数调优