poj1611 The Suspects(并查集)

题目链接

http://poj.org/problem?id=1611

题意

有n个学生,编号0~n-1,m个社团,每个社团有k个学生,如果社团里有1个学生是SARS的疑似患者,则该社团所有人都要被隔离。起初学生0是疑似患者,求要隔离多少人。

思路

使用并查集求解。

代码

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5
 6 const int N = 30000 + 10;
 7 int p[N];
 8
 9 void make_set(int n)
10 {
11     for (int i = 0; i < n; i++)
12         p[i] = i;
13 }
14
15 int find_root(int x)
16 {
17     if (x == p[x])
18         return x;
19     else
20     {
21         int temp = find_root(p[x]);        //路径压缩
22         p[x] = temp;
23         return temp;
24     }
25 }
26
27 void union_set(int x, int y)
28 {
29     int px = find_root(x);
30     int py = find_root(y);
31     if (px != py)
32         p[px] = py;
33 }
34
35 int main()
36 {
37     freopen("poj1611.txt", "r", stdin);
38     int n, m;
39     while (scanf("%d%d", &n,&m)==2 && n)
40     {
41         make_set(n);
42         for (int i = 0; i < m; i++)
43         {
44             int k;
45             int x, y;
46             scanf("%d%d", &k, &x);
47             for (int j = 1;j < k;j++)
48             {
49                 scanf("%d", &y);
50                 union_set(x, y);
51                 x = y;
52             }
53         }
54         int root = find_root(0);
55         int ans = 0;
56         for (int i = 0; i < n; i++)
57             if (find_root(i) == root)
58                 ans++;
59         cout << ans << endl;
60     }
61     return 0;
62 }
时间: 2024-11-06 20:56:23

poj1611 The Suspects(并查集)的相关文章

POJ1611 The Suspects: 并查集入门

#include<iostream> using namespace std; #define Size 30000 int Pre[Size+1], Sum[Size+1];// Sum[i] 表示 第i组 的人数 int Get_Pre( int a ) { if( Pre[a]!=a ) a = Get_Pre( Pre[a] );// 路径压缩 return a; } void Union( int a, int b ) { int P1 = Get_Pre(a); int P2 =

[ACM] POJ 1611 The Suspects (并查集,输出第i个人所在集合的总人数)

The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 21586   Accepted: 10456 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T

The Suspects (并查集)

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-Sprea

POJ 1611 The Suspects (并查集+数组记录子孙个数 )

The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 24134   Accepted: 11787 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T

The Suspects(并查集维护根节点信息)

The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 37090   Accepted: 17980 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T

POJ 1611 The Suspects (并查集求数量)

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 t

POJ 1611 The Suspects 并查集 Union Find

本题也是个标准的并查集题解. 操作完并查集之后,就是要找和0节点在同一个集合的元素有多少. 注意这个操作,须要先找到0的父母节点.然后查找有多少个节点的额父母节点和0的父母节点同样. 这个时候须要对每一个节点使用find parent操作.由于最后状态的时候,节点的parent不一定是本集合的根节点. #include <stdio.h> const int MAX_N = 30001; struct SubSet { int p, rank; }sub[MAX_N]; int N, M; v

The Suspects——并查集求联通块数量的模板题

题目链接 题意: n个学生分属m个团体,一个学生可以属于多个团体.一个学生疑似患病,则他所属的整个团体都疑似患病.已知0号疑似患病,以及每个团体都有哪些学生构成,求一共有多少个学生疑似患病 题解: 很经典的并查集的题目,找一个num[]数组记录每一个以当前下标为根节点的集合的个体数目,最后输出0号的根节点对应的num值,就是0号学生所在团体的人数. 代码: #include<iostream> #include<stdio.h> #include<math.h> usi

POJ 1611 The Suspects (并查集)

The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 25130   Accepted: 12313 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T

The Suspects(并查集求节点数)

The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 28164   Accepted: 13718 Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. T