博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
B - The Suspects
阅读量:4338 次
发布时间:2019-06-07

本文共 1383 字,大约阅读时间需要 4 分钟。

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 42 1 25 10 13 11 12 142 0 12 99 2200 21 55 1 2 3 4 51 00 0

Sample Output

411 AC代码:
#include 
#include
using namespace std; int father[30001],sum[30001]; int f(int n) { if(n!=father[n]) father[n]=f(father[n]); return father[n]; //或return father[n]==n?n:father[n]=f(father[n]); }//获取根节点 void merge(int x,int y) { int fx,fy; fx=f(x); fy=f(y); if(fx
fy) { father[fx]=fy; sum[fy]+=sum[fx]; } } //合并两个元素所在的集合 //判断两个元素是否属于同一个集合 int main() { int n,m,k,p,q; while(~scanf("%d%d",&n,&m)) { for(int i=0;i<=n;i++) { father[i]=i; sum[i]=1; }//初始化 if(n==0&&m==0)break; for(int i=0;i
分析:本题可以用并查集解决,就是让你求有多少人与0号有关 心得:之前没见过这种题目,读了很久也没读懂问题的实质,然后自己去网上搜了一下,又看了一下并查集的概念和算法,最后还是将这个题做了出来,但是感觉对并查集还是不是很懂。这也是一个模板题。

转载于:https://www.cnblogs.com/lbyj/p/5696280.html

你可能感兴趣的文章
一、 kettle开发、上线常见问题以及防错规范步骤
查看>>
eclipse没有server选项
查看>>
CRC码计算及校验原理的最通俗诠释
查看>>
使用Gitbook来编写你的Api文档
查看>>
jquery扩展 $.fn
查看>>
Markdown指南
查看>>
influxDB的安装和简单使用
查看>>
JPA框架学习
查看>>
JPA、JTA、XA相关索引
查看>>
机器分配
查看>>
php opcode缓存
查看>>
springcloud之Feign、ribbon设置超时时间和重试机制的总结
查看>>
观看杨老师(杨旭)Asp.Net Core MVC入门教程记录
查看>>
UIDynamic(物理仿真)
查看>>
Windows下安装Redis
查看>>
winform非常实用的程序退出方法!!!!!(转自博客园)
查看>>
centos安装vim
查看>>
linux工作调度(计划任务)
查看>>
新部署到服务器 报 The requested URL /home/profession was not found on this server. 错误
查看>>
hadoop从非HA转到NAMENODE HA时需要注意的一个问题
查看>>