# PAT_A1094#The Largest Generation

### Source:

PAT A1094 The Largest Generation (25 分)

### Description:

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

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


where ID is a two-digit number representing a family member, K (>) 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

### Code:

 1 /*
2 time: 2019-06-28 14:44:36
3 problem: PAT_A1094#The Largest Generation
4 AC: 18:52
5
6 题目大意：
7 求树中结点个数最多的层次及其结点个数
8
9 基本思路：
10 层次遍历，记录结点层次并统计各层次人数即可
11 */
12 #include<cstdio>
13 #include<vector>
14 #include<queue>
15 using namespace std;
16 const int M=110;
17 vector<int> tree[M];
18 int hight[M]={0},num[M]={0},maxP=0,maxL;
19
20 void Travel(int root)
21 {
22     hight[root]=1;
23     queue<int> q;
24     q.push(root);
25     while(!q.empty())
26     {
27         root = q.front();
28         num[hight[root]]++;
29         if(num[hight[root]] > maxP)
30         {
31             maxP = num[hight[root]];
32             maxL = hight[root];
33         }
34         q.pop();
35         for(int i=0; i<tree[root].size(); i++)
36         {
37             int kid = tree[root][i];
38             hight[kid] = hight[root]+1;
39             q.push(kid);
40         }
41     }
42
43 }
44
45 int main()
46 {
47 #ifdef ONLINE_JUDGE
48 #else
49     freopen("Test.txt", "r", stdin);
50 #endif // ONLINE_JUDGE
51
52     int n,m,id,k,kid;
53     scanf("%d%d", &n,&m);
54     for(int i=0; i<m; i++)
55     {
56         scanf("%d%d", &id,&k);
57         for(int j=0; j<k; j++)
58         {
59             scanf("%d", &kid);
60             tree[id].push_back(kid);
61         }
62     }
63     Travel(1);
64     printf("%d %d", maxP,maxL);
65
66     return 0;
67 }

10-26

08-19 910
10-20