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 18Sample Output:
9 4
输入:
N(这个家族的总成员数) M(有几个人有子嗣)
M行(父节点编号) father count(几个子结点) child1 child2……childcount(对应子结点编号)
……
求哪一辈份的人数最多,是哪一代。
这里默认祖宗为编号1,祖宗为第一代;这里用BFS层遍历数个数;找出人数最多的那一代。
我一开始开动态数组的时候开太小,vs就报错。
评测结果
时间 | 结果 | 得分 | 题目 | 语言 | 用时(ms) | 内存(kB) | 用户 |
---|---|---|---|---|---|---|---|
8月19日 10:25 | 答案正确 | 25 | 1094 | C++ (g++ 4.7.2) | 1 | 304 | datrilla |
测试点
测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
---|---|---|---|---|
0 | 答案正确 | 1 | 304 | 11/11 |
1 | 答案正确 | 1 | 252 | 2/2 |
2 | 答案正确 | 1 | 252 | 6/6 |
3 | 答案正确 | 1 | 304 | 6/6 |
#include<iostream> #include<vector> #include<queue> using namespace std; void readln(vector<vector<int>>*families, int M) { int father; int child; int count; while (M--) { cin >> father >> count; while (count--) { cin >> child; (*families)[father].push_back(child); } } } void BFSLevelMaxNum(vector<vector<int>>*families, int root, int &max, int&level) { int size, generation=level; queue<int>Q; Q.push(root); while (!Q.empty()) { size = Q.size(); if (size > max) { max = size; level = generation; } while(size--) { root = Q.front(); Q.pop(); for (vector<int>::iterator iter = (*families)[root].begin(); iter != (*families)[root].end(); iter++) Q.push((*iter)); } generation++; } } int main() { int N, M,root,max,level; cin >> N >> M; root = 1; vector<vector<int>>families(N+1); readln(&families, M); max = 1; level = 1; BFSLevelMaxNum(&families,root,max,level); cout << max << " " << level << endl; system("pause"); return 0; }