1094. The Largest Generation (25)


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 <iostream>
  2. #include <vector>
  3. #include <map>
  4. using namespace std;
  5. map<int, vector<int>> family;
  6. int peopleInEachGeneration[101];
  7. int maxPeople = 0, maxG = 0;
  8. void dfs(int i, int level) {
  9. peopleInEachGeneration[level]++;
  10. if (peopleInEachGeneration[level] > maxPeople) {
  11. maxPeople = peopleInEachGeneration[level];
  12. maxG = level;
  13. }
  14. if (family[i].size() == 0) {
  15. return;
  16. }
  17. else {
  18. for (int j = 0; j < family[i].size(); j++)
  19. dfs(family[i][j], level + 1);
  20. }
  21. }
  22. int main(void) {
  23. int n, m;
  24. cin >> n >> m;
  25. for (int i = 0; i < m; i++) {
  26. int id, k;
  27. cin >> id >> k;
  28. for (int j = 0; j < k; j++) {
  29. int idtemp;
  30. cin >> idtemp;
  31. family[id].push_back(idtemp);
  32. }
  33. }
  34. dfs(1, 1);
  35. cout << maxPeople << " " << maxG;
  36. return 0;
  37. }





posted @ 2015-12-06 11:53  白夜行zz  阅读(151)  评论(0)    收藏  举报