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 N (<) 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 (<) 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 (>) 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

Keys:

Code:

 1 /*
 2 time: 2019-08-24 15:25:08
 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 using namespace std;
15 const int M=1e3;
16 vector<int> tree[M];
17 int scale[M]={0},largest=0,generation;
18 
19 void Travel(int root, int layer)
20 {
21     scale[layer]++;
22     if(scale[layer] > largest)
23     {
24         largest = scale[layer];
25         generation = layer;
26     }
27     for(int i=0; i<tree[root].size(); i++)
28         Travel(tree[root][i],layer+1);
29 }
30 
31 int main()
32 {
33 #ifdef ONLINE_JUDGE
34 #else
35     freopen("Test.txt", "r", stdin);
36 #endif // ONLINE_JUDGE
37 
38     int n,m,id,k,kid;
39     scanf("%d%d", &n,&m);
40     for(int i=0; i<m; i++)
41     {
42         scanf("%d%d", &id,&k);
43         for(int j=0; j<k; j++)
44         {
45             scanf("%d", &kid);
46             tree[id].push_back(kid);
47         }
48     }
49     Travel(1,1);
50     printf("%d %d", largest,generation);
51 
52     return 0;
53 }

 

posted @ 2019-06-28 15:10  林東雨  阅读(193)  评论(0编辑  收藏  举报