The Suspects
Time Limit: 1000MS   Memory Limit: 20000K
Total Submissions: 21598   Accepted: 10461

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

Source

题目大意  :有n个学生   m个小组,每小组有k个学生,一个学生可能会參加多个小组。小组中仅仅要有一个人得病,其余的都是嫌疑人。如今已知这些小组的人员,且0号学生已经患病。求一共同拥有多少个嫌疑人。

并查集的基本运用

每一个小组的人员属于同一个集合。在根节点记录每一个集合的个数num[i],然后找到0所属的根节点。num[find_Set(0)]即为全部的嫌疑人数。

#include <iostream>
#include<cstdio>
using namespace std;
const int Max=300010; int p[Max],rank[Max];
int num[Max];//元素个数 int Find_Set(int x)
{
if (x!=p[x])
p[x]=Find_Set(p[x]);
return p[x];
} void Union(int x,int y)
{
x=Find_Set(x);
y=Find_Set(y);
if(x==y)
return;
if (rank[x]>rank[y])
{
p[y]=x;
num[x]+=num[y];
}
else
{
p[x]=y;
if (rank[x]==rank[y])
rank[x]++;
num[y]+=num[x];
}
} int main()
{
int i,j,k,n,m;
int a,b;
int s1,s2;
while (cin>>n>>m)
{
if(n==0&&m==0)
{
break;
}
for (i=0;i<n;i++)
{
p[i]=i;
rank[i]=0;
num[i]=1;
}
for (i=0;i<m;i++)
{
cin>>k>>a;
for (j=1;j<k;j++)
{
cin>>b;
s1=Find_Set(a);
s2=Find_Set(b);
Union(s1,s2);
}
}
i=Find_Set(0);
cout<<num[i]<<endl;
}
return 0;
}

poj 1611 The Suspects(并查集)的更多相关文章

  1. poj 1611 The Suspects(并查集输出集合个数)

    Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, wa ...

  2. poj 1611 The Suspects 并查集变形题目

    The Suspects   Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 20596   Accepted: 9998 D ...

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

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 24134   Accepted: 11787 De ...

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

    Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, wa ...

  5. POJ 1611 The Suspects 并查集 Union Find

    本题也是个标准的并查集题解. 操作完并查集之后,就是要找和0节点在同一个集合的元素有多少. 注意这个操作,须要先找到0的父母节点.然后查找有多少个节点的额父母节点和0的父母节点同样. 这个时候须要对每 ...

  6. poj 1611 The Suspects 并查集

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 30522   Accepted: 14836 De ...

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

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 21586   Accepted: 10456 De ...

  8. 并查集 (poj 1611 The Suspects)

    原题链接:http://poj.org/problem?id=1611 简单记录下并查集的模板 #include <cstdio> #include <iostream> #i ...

  9. [并查集] POJ 1611 The Suspects

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 35206   Accepted: 17097 De ...

  10. poj 1611:The Suspects(并查集,经典题)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 21472   Accepted: 10393 De ...

随机推荐

  1. PCB设计资料:看到最后才知道是福利

    參考资料 通过以下的关键词直接从网络上Google或Baidu就能非常easy的找到以下的资料,这里仅仅是以參考文献的方式做一个整理以及简单的说明. 刘雅芳,张俊辉. 抗干扰角度分析六层板的布线技巧. ...

  2. traceroute工作原理

      traceroute, 也就是 trace route,跟踪路由.这个程序最早是Van Jacobson实现的.源代码在网上能够找到,只是我还没有去找.基本的原理是IP路由过程中对数据包TTL(T ...

  3. 使用内容提供者和xml备份联系人

    1.通过内容提供者获取联系人信息 package com.ithaimazyh.readcontact; import java.util.ArrayList; import java.util.Li ...

  4. android随记

    [Android]中国大部分城市地区的结构定义与按拼音排序  http://blog.csdn.net/sodino/article/details/6739522

  5. HttpURLConnection中使用代理(Proxy)及其验证(Authentication)

    HttpURLConnection中使用代理(Proxy)及其验证(Authentication) 使用Java的HttpURLConnection类可以实现HttpClient的功能,而不需要依赖任 ...

  6. [Oracle]TRIGGER

    题外话: Oracle 的使用. 以前客户方用的是SQL SERVER,一直在用SQL SERVER,感觉SQL SERVER的用户体验非常好. 不管是开发环境的界面布局到SQL 的写法上,感觉写起来 ...

  7. javascript 浏览器兼容性写法

    var event = window.event || arguments.callee.caller.arguments[0]; // 获取event对象 event = event.srcElem ...

  8. linux系统挂掉问题的分析

    玩linux系统,经常遇到的一件事就是做了某个操作之后系统会突然挂掉,这要怎么办? 1. 首先我们要看log,看看是否会留下一些蛛丝马迹,比如PC/LR是否有留下来. PC是ARM的一个寄存器,即程序 ...

  9. LoadRunner 监控 Apache

    配置Apache部分 1.修改Apache中Httpd.conf文件 <Location /server-status> SetHandler server-status Order de ...

  10. Java多线程实现生产者消费者延伸问题

    在操作系统中有一类问题被称为生产者消费者问题:意为,有数个生产者生产产品,有数个消费者消费产品,他们共享一定数量的缓存. 这里用java多线程编程,实现生产者消费者问题的一种延伸,橘子苹果问题. 题目 ...