pat1094. The Largest Generation (25)

1094. The Largest Generation (25)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to find the generation with the largest population.

Input Specification:

Each input file contains one test case. Each case starts with two positive integers N (<100) which is the total number of family members in the tree (and hence assume that all the members are numbered from 01 to N), and M (<N) which is the number of family members who have children. Then M lines follow, each contains the information of a family member in the following format:

ID K ID[1] ID[2] ... ID[K]

where ID is a two-digit number representing a family member, K (>0) is the number of his/her children, followed by a sequence of two-digit ID's of his/her children. For the sake of simplicity, let us fix the root ID to be 01. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print in one line the largest population number and the level of the corresponding generation. It is assumed that such a generation is unique, and the root level is defined to be 1.

Sample Input:
23 13
21 1 23
01 4 03 02 04 05
03 3 06 07 08
06 2 12 13
13 1 21
08 2 15 16
02 2 09 10
11 2 19 20
17 1 22
05 1 11
07 1 14
09 1 17
10 1 18
Sample Output:
9 4

提交代码

姥姥教的方法,顺便用一下。

last:更新前,本层最后一个元素
tail:下一层当前最后一个元素
floor:指向当前的层数
 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<queue>
 6 #include<vector>
 7 #include<cmath>
 8 using namespace std;
 9 vector<int> v[100];
10 int main(){
11     int n,m;
12     scanf("%d %d",&n,&m);
13     int i,num,count,in;
14     for(i=0;i<m;i++){
15         scanf("%d %d",&num,&count);
16         while(count--){
17             scanf("%d",&in);
18             v[num].push_back(in);
19         }
20     }
21     queue<int> q;
22     q.push(1);
23     int last=1,tail,floor=1,cur,maxcount=1,maxfloor=1,curcount=0;
24     while(!q.empty()){
25         cur=q.front();
26         q.pop();
27         for(i=0;i<v[cur].size();i++){
28             q.push(v[cur][i]);
29             tail=v[cur][i];
30             curcount++;
31         }
32         if(last==cur){
33             last=tail;
34             floor++;//point to next floor
35             if(curcount>maxcount){
36                 maxcount=curcount;
37                 maxfloor=floor;
38             }
39             curcount=0;
40         }
41     }
42     printf("%d %d
",maxcount,maxfloor);
43     return 0;
44 }
原文地址:https://www.cnblogs.com/Deribs4/p/4762146.html