并查集 Ⅱ 古城微笑少年丶 2022-08-03 14:35 278阅读 0赞 \[poj 1611\] ([http://poj.org/problem?id=1611][http_poj.org_problem_id_1611]) 题目描述: The Suspects(嫌疑犯) Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 27293 Accepted: 13318 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 *言简意赅:* 此题是要计算可能受感染者的数量,已知共有n人和m个团体,处于同一个团体中的人之间能产生传染的可能,且已知0号同学是病毒携带者;则此题可用并查集的方法来解决,要特别注意输入时的处理,可以先将每个团体中的人连起来,保证根节点为团体中第一个人,并设置一个num数组记录下来每个团体中的人数,最后将含有0的个数输出即可 代码实现: #include <iostream> #include <stdio.h> using namespace std; const int N=30005; int father[N]; int num[N];//num[]存储节点所在集合元素的个数,father[]存储节点的父亲节点 void make_set(int x)//初始化集合 { father[x]=-1; num[x]=1; } int find_set(int x)//查找x元素所在的集合,并返回根节点 { int r,tmp; r=x;//记录下待查找值x while(father[r]!=-1) { r=father[r];//找到根节点 } while(x!=r)//压缩路径,将路径上所有x的子孙都连接到r上 { tmp=father[x]; father[x]=r; x=tmp; } return x; } void union_set(int a,int b) { a=find_set(a); b=find_set(b); if(a==b)//若两个元素在同一个集合,不需要合并 return; if(num[a]<=num[b])//将小集合合并到大集合中 { father[a]=b; num[b]+=num[a]; } else { father[b]=a; num[a]+=num[b]; } } int main() { int n,m,k,a,b; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0)break;//if(n+m==0)break; for(int i=0;i<n;i++) { make_set(i); } for(int i=0;i<m;i++) { scanf("%d",&k); scanf("%d",&a); for(int j=1;j<k;j++) { scanf("%d",&b); union_set(a,b); } } printf("%d\n",num[find_set(0)]); } return 0; } [http_poj.org_problem_id_1611]: http://poj.org/problem?id=1611
相关 并查集 Ⅱ \[poj 1611\] ([http://poj.org/problem?id=1611][http_poj.org_problem_id_1611]) 题目描述: T 古城微笑少年丶/ 2022年08月03日 14:35/ 0 赞/ 279 阅读
相关 并查集 并查集JAVA版框架 并查集是一种用来管理元素分组情况的数据结构。 并查集可以高效地进行如下操作: \--查询元素a和元素b是否属于同一组 落日映苍穹つ/ 2022年06月16日 12:44/ 0 赞/ 314 阅读
相关 并查集 这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧 并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的 港控/mmm°/ 2022年06月13日 14:13/ 0 赞/ 300 阅读
相关 并查集 > 题目 > 某学校近期要组织全校同学出去参加某项活动,由于人数众多,学校决定让同学们自行组队,以小组为单位进行活动。假设学校一共n个同学,每个同学有一个唯一的数字作为标签 Myth丶恋晨/ 2022年06月08日 09:24/ 0 赞/ 308 阅读
相关 并查集 森林: 森林是由若干棵互不相交的树组成,两棵树分别独立,没有交集 ![20181112082744488.png][] 并查集: 并查集的结构和森林十分相似,是 Love The Way You Lie/ 2022年04月17日 02:27/ 0 赞/ 367 阅读
相关 并查集 来看一个实例,[杭电1232畅通工程][1232] 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性 我就是我/ 2022年03月29日 10:58/ 0 赞/ 370 阅读
相关 并查集 > 并查集是一种树形的数据结构,用于集合的合并。 与C++STL相比的优势: 1. 可以同时维护多个集合 2. 快速的合并两个集合 \\现实: 用数组实现。fat 左手的ㄟ右手/ 2022年02月05日 00:23/ 0 赞/ 261 阅读
相关 并查集 例题: ![输入样例][20190805122001677.png] 输入样例,第一行为一个整数n,代表有n台电脑,编号1-n;接下来进行一系列操作,当输入‘c’时,判 Dear 丶/ 2021年11月11日 08:04/ 0 赞/ 387 阅读
相关 并查集 一、算法解释 用于解决一些有N个元素的集合应用问题。 1、将每个元素初始化为自身单独成为一个集合。用p\[i\]的值表示该元素所在集合。 ![这里写图片描述][S 桃扇骨/ 2021年09月14日 02:56/ 0 赞/ 474 阅读
相关 并查集 并查集的作用就是快速判断两个元素是否在同一个集合中,快速将两个集合合并 基本模板 include <iostream> include <a 比眉伴天荒/ 2021年06月22日 15:37/ 0 赞/ 572 阅读
还没有评论,来说两句吧...