poj-1611-The Suspects

简介: poj-1611-The Suspects


The Suspects

Time Limit: 1000MS   Memory Limit: 20000K
Total Submissions: 28243   Accepted: 13760

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

Asia Kaohsiung 2003



#include<cstdio>
#include<cstring>
#define M 30000+10
int p[M],num[M];
int find(int x)
{
  if(x!=p[x])
        p[x]=find(p[x]);
  return p[x];
}
void he(int x,int y)
{
  int x1=find(x);
  int y1=find(y);
    if(x1!=y1)
    {
      p[y1]=x1;
      num[x1]+=num[y1];
  }
}
int main()
{
  int n,m,a;
  while(scanf("%d%d",&n,&m),n|m)
  {
    for(int i=0;i<n;i++)
    {
      p[i]=i;
      num[i]=1;
    }
    for(int i = 1; i <= m; i++)
    {
      scanf("%d", &a);
      int *stu = new int[a]; //动态数组 
      for(int j = 0; j < a; ++j)
      {
        scanf("%d", &stu[j]);
        if(j != 0)
          he(stu[j - 1], stu[j]);
      }
      delete(stu);//数组清零 
    }
    printf("%d\n", num[find(0)]);
  }
  return 0;
}








目录
相关文章
poj 3298 数状数组
题目大意是一条大街上住着n个乒乓球爱好者,他们的水平高低用一个数值表示,他们经常举办比赛,比赛要三个人,一人当裁判。对裁判是有一定要求的,裁判的水平必须介于两选手之间且必须住他们中间,计算可以举办多少场比赛
41 0
POJ 2487 Stamps
POJ 2487 Stamps
104 0
poj 3620
题意:给出一个矩阵,其中有些格子干燥、有些潮湿。       如果一个潮湿的格子的相邻的四个方向有格子也是潮湿的,那么它们就可以构成更大       的湖泊,求最大的湖泊。       也就是求出最大的连在一块儿的潮湿的格子的数目。
573 0
poj 3664
http://poj.org/problem?id=3664 进行两轮选举,第一轮选前n进入第二轮,第二轮选最高   #include #include using namespace std; struct vote { int a,b; int c; ...
735 0
|
并行计算 网络架构
poj-1005-l tanink i need a houseboat
Description Fred Mapper is considering purchasing some land in Louisiana to build his house on. In the process of investigating the land, he learned ...
986 0
|
机器学习/深度学习 算法
|
算法 机器人 编译器
POJ-2632
#include int main() { int k,a,b,n,m,i,j,num,rep,rect[100][100],robot[100][3]; int flag; char c; for(scanf("%d...
928 0
|
消息中间件 人工智能 JavaScript
|
机器学习/深度学习 Windows