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
1 #include <stdio.h> 2 #include <vector> 3 #include <queue> 4 using namespace std; 5 const int maxn=110; 6 vector<int> fa[maxn]; 7 int main(){ 8 int n,m; 9 scanf("%d %d",&n,&m); 10 for(int i=1;i<=m;i++){ 11 int root,k; 12 scanf("%d %d",&root,&k); 13 for(int j=0;j<k;j++){ 14 int ch; 15 scanf("%d",&ch); 16 fa[root].push_back(ch); 17 } 18 } 19 queue<int> q; 20 q.push(1); 21 int maxm=1,lvl=1,max_l=1; 22 while(!q.empty()){ 23 queue<int> child; 24 int num=0; 25 while(!q.empty()){ 26 int now = q.front(); 27 q.pop(); 28 for(int i=0;i<fa[now].size();i++){ 29 child.push(fa[now][i]); 30 num++; 31 } 32 } 33 lvl++; 34 if(num>maxm){ 35 maxm=num; 36 max_l=lvl; 37 } 38 while(!child.empty()){ 39 q.push(child.front()); 40 child.pop(); 41 } 42 } 43 printf("%d %d",maxm,max_l); 44 }
注意点:统计每层个数,用两个队列实现,同时统计个数和层数,一层全遍历完,再把下一层加入到队列中去