POJ 1611 The Suspects (并查集)
题目链接:
http://acm.hust.edu.cn/vjudge/contest/123393#problem/B
Description
严重急性呼吸系统综合症( 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 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个小组;
若有学生可能感染SARS,则其所在的小组均被视为可能的患者.
一开始只有学生#0染病;
输出所有可能的患者的数量.
题解:
很明显的并查集模版题.
将同一小组的所有人合并到一起;
查询每个学生是否跟#0在一个集合.
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#define LL long long
#define eps 1e-8
#define maxn 31000
#define inf 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;int fa[maxn];
int rank[maxn];void init_set() {for(int i=0; i<maxn; i++) {fa[i] = i;rank[i] = 0;}
}int find_set(int x) {return fa[x] = (x==fa[x]? x:find_set(fa[x]));
}void unit_set(int x, int y) {x = find_set(x);y = find_set(y);if(rank[x] < rank[y]) swap(x, y);fa[y] = x;if(rank[x] == rank[y]) rank[x]++;
}int n, m;int main(int argc, char const *argv[])
{//IN;while(scanf("%d %d", &n,&m) != EOF && (m||n)){init_set();while(m--) {int k; scanf("%d", &k);if(!k) continue;int x; scanf("%d", &x); k--;while(k--) {int y; scanf("%d", &y);unit_set(x, y);}}int cnt = 0;for(int i=0; i<n; i++) {if(find_set(i) == find_set(0)) cnt++;}printf("%d\n", cnt);}return 0;
}
转载于:https://www.cnblogs.com/Sunshine-tcf/p/5699051.html
POJ 1611 The Suspects (并查集)相关推荐
- POJ 1611 The Suspects 并查集
The Suspects Time Limit:1000MS Memory Limit:20000KB 64bit IO Format:%lld & %llu Descript ...
- pku 1611 The Suspects 并查集的应用
http://poj.org/problem?id=1611 思路:统计出和0能够联系在一起的点,然后输出其个数 View Code #include <cstdio>#include & ...
- POJ 1611 The Suspects (并查集)
文章作者:ktyanny 文章来源:ktyanny 转载请注明,谢谢合作. ktyanny:a的第一道并查集. 题目描述: 有很多组学生,在同一个组的学生经常会接触,也会有新的同学的加入.但是SARS ...
- poj 1611 The Suspects // hoj 1564 The Suspects 并查集
/* 题目: 是说学生0怀疑有SARS病,跟他接触过的俱乐部的所有人以及他接触过的人再与别人接触, 都有可能有SARS病,要你求出给出的所有俱乐部人的名单,要你求出所有的嫌疑犯... 分析: 用并查集 ...
- Poj 1611 The Suspects
Poj 1611 的传送门 ***The Suspects*** Description Severe acute respiratory syndrome (SARS), an atypical p ...
- POJ - 1611 The Suspects
题目链接:1611 -- The Suspects 问题描述 思路 简单并查集 代码 #include <cstdio> #include <cstring> #include ...
- POJ 2236 Wireless Network 并查集
Wireless Network 并查集 Crawling in process... Crawling failed Time Limit:10000MS Memory Limit:6553 ...
- POJ 1182 食物链,并查集的拓展
http://poj.org/problem?id=1182 /******************************************************** 此道题目 前天看的时候 ...
- POJ 1417 True Liars 并查集+背包
题目链接:http://poj.org/problem?id=1417 解题思路:比较容易想到的是并查集,然后把第三组数据测试一下之后发现这并不是简单的并查集,而是需要合并之后然后判断的.并且鉴于题目 ...
最新文章
- JSON数据序列化与反序列化实战
- 王高利:TCP Wrappers访问控制(hosts.allow,hosts.deny)
- [LeetCode]题解(python):011-Container With Most Water
- 并发编程6 锁进程队列
- jvm理论-字节码指令
- 三十八、网络通信Socket模块实现文件传输
- 1~9组成三个3位的平方数
- 数据结构与算法 | 直接插入排序、希尔排序
- eclipse下java.lang.OutOfMemoryError: PermGen space解决方法
- 查询出各个学科的前3名的同学信息的Sql
- 【自我救赎--牛客网Top101 4天刷题计划】 第四天 登峰造极
- 前端下载音频的两种处理方式
- Centos7+搜狗拼音输入法 安装不踩雷
- 机器学习综述论文笔记:Machine Learning: A Review of Learning Types
- 泰坦尼克号数据处理与预测
- 以太网rxp rxn txp txn
- 第二十九章 狼心狗肺
- 圆梦微软 — 旅游和入职体验
- 编译原理:语法制导翻译
- Intellij IDEA中push代码到github中引发的部分报错 解决思路
热门文章
- img=img%3e128 matlab,Matlab中一般的数值计算和使用
- mysql下一个版本号_mysql下一个版本应该且实现并不复杂增加的常用功能
- x299服务器芯片组,18核心炸裂!X299主板全集:为它真拼了
- 办公技巧:Excel下拉菜单小技巧,赶紧学一下!
- Redis 怎么防止数据丢失?面试必问!
- 计算机基础:存储系统知识笔记(二)
- Java 13,最新最全新特性解读
- C# 实现SQLServer数据库备份示例
- 【工具】switchhost
- xtrabackup备份mysql“ib_logfile0 is of different”错误分析