官网
题目
1094. The Largest Generation (25)
时间限制
200 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
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 (
题目大意
- 1.给你一个pedigree tree,要你去求最大人口的那一代。
- 2.N,总成员,M有孩子的成员的个数。
- 3.id k id[i]…,root id是01.
- 4.输出最大人数和代数,root的代为1.
解题思路
- 1.注意只有root一个人的时候,最后输出的members和lever数都是1。
- 2.其余都是bfs遍历求出每个成员的lever,然后统计一下再输出即可。
AC代码
#include<iostream>
#include<cstdio>
#include<vector>
#include<deque>
using namespace std;
int lever[101], members_lever[101];
vector<int> child[101];
int m, n;
//注意只有root一个人的时候,最后输出的members和lever数都是1。
int max_number = 1, max_lever = 1;
int main()
{
cin >> n >> m;
int w, k, t;
for (int i = 0; i < m; i++)
{
cin >> w >> k;
for (int i = 0; i < k; i++)
{
cin >> t;
child[w].push_back(t);
}
}
lever[1] = 1;
//bfs遍历求代数lever以及每一代的人数
deque<int> dq;
dq.push_back(01);
while (!dq.empty())
{
int now = dq.front();
dq.pop_front();
if (!child[now].empty())
{
for (int i = 0; i < child[now].size(); i++)
{
int children = child[now][i];
//更新lever和每一层的人数
lever[children] = lever[now] + 1;
members_lever[lever[children]]++;
//统计输出
if (max_number<members_lever[lever[children]])
{
max_number = members_lever[lever[children]];
max_lever = lever[children];
}
dq.push_back(child[now][i]);
}
}
}
cout << max_number << " " << max_lever << endl;
return 0;
}