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-digitID
's of his/her children. For the sake of simplicity, let us fix the rootID
to be01
. 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
树+DFS,一次通过,为自己鼓掌!
#include<cstdio>
#include<vector>
using namespace std;
const int maxn = 200;
vector<int> child[maxn];
int depth_generation[maxn] = { 0 };
int n, m;
void DFS(int index, int depth) {// root level is defined to be 1
depth_generation[depth]++;
if (child[index].size() == 0) {
return;
}
for (int i = 0; i < child[index].size(); i++) {
DFS(child[index][i], depth + 1);
}
}
int main() {
scanf("%d%d", &n, &m);
int node, child_num, tmp;
for (int i = 0; i < m; i++) {
scanf("%d%d", &node, &child_num);
while (child_num--) {
scanf("%d", &tmp);
child[node].push_back(tmp);
}
}
int num = 0, level;
DFS(1, 1);
for (int i = 1; i <= n; i++) {
if (depth_generation[i] > num) {
num = depth_generation[i];
level = i;
}
}
printf("%d %d", num, level);
return 0;
}