1094. The Largest Generation
来源:互联网 发布:演员知乎 编辑:程序博客网 时间:2024/05/12 05:34
题目
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.用BFS或DFS实现都可以,都要先在全局定义一个hashTable[maxn],hashTable[i]记录第i层的结点个数。
DFS版代码
#include<cstdio>#include<vector>using namespace std;const int maxn = 110;struct node{ vector<int> child;}Node[maxn]; int n,m;//结点个数,非叶结点的个数 int hashTable[maxn] = { 0 };//hashTable[i] 表示第 i层的结点个数 void DFS(int index,int level){ hashTable[level]++; for(int i=0;i<Node[index].child.size();i++){ DFS(Node[index].child[i],level+1); }} int main(){ scanf("%d%d",&n,&m); int father,k,child;//父亲结点,孩子个数,孩子结点 for(int i=0;i<m;i++){//输入结点信息 scanf("%d%d",&father,&k); for(int i=0;i<k;i++){ scanf("%d",&child); Node[father].child.push_back(child); } } DFS(1,1);//根结点编号为01,定义为第1层 int maxNum = -1,maxLevel; for(int i=1;i<=maxn;i++){ if(hashTable[i] > maxNum){ maxNum = hashTable[i]; maxLevel = i; } } printf("%d %d\n",maxNum,maxLevel); return 0;}
BFS版代码
#include<cstdio>#include<queue>#include<vector>using namespace std;const int maxn = 110;struct node{ int layer; vector<int> child;}Node[maxn]; int n,m;//结点个数,非叶结点的个数 int hashTable[maxn] = { 0 };//hashTable[i] 表示第 i层的结点个数 void BFS(int root){ queue<int> q; q.push(root); Node[root].layer = 1; while(!q.empty()){ int top = q.front(); q.pop(); hashTable[Node[top].layer]++; for(int i=0;i<Node[top].child.size();i++){ int kid = Node[top].child[i]; q.push(kid); Node[kid].layer = Node[top].layer + 1; } } }int main(){ scanf("%d%d",&n,&m); int father,k,child;//父亲结点,孩子个数,孩子结点 for(int i=0;i<m;i++){//输入结点信息 scanf("%d%d",&father,&k); for(int i=0;i<k;i++){ scanf("%d",&child); Node[father].child.push_back(child); } } BFS(1);//根结点编号为01 int maxNum = -1,maxLevel; for(int i=1;i<=maxn;i++){ if(hashTable[i] > maxNum){ maxNum = hashTable[i]; maxLevel = i; } } printf("%d %d\n",maxNum,maxLevel); return 0;}
- 1094.The Largest Generation
- 1094. The Largest Generation
- 1094. The Largest Generation
- 1094. The Largest Generation
- 1094. The Largest Generation
- 1094. The Largest Generation
- 1094. The Largest Generation
- 1094. The Largest Generation
- 1094. The Largest Generation
- 1094. The Largest Generation (25)
- PAT 1094. The Largest Generation
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- 1094. The Largest Generation (25)
- Android 两行代码实现换肤 从appcompat-v7原理出发
- 剑指offer 二维数组中的查找
- 转发一个不错的解释加密和认证的文章
- mysql 存储过程参数 in out inout 特点
- matlab 批量读取execl(csv)文件
- 1094. The Largest Generation
- hdu 6016 Count The Sheep 思维
- bootstrap玩不起来!!!!!!
- CSDN日报20170226——《你离心想事成只差一个计划》
- 深度神经网络(DNN)模型与前向传播算法
- Android 5.0+ 高级动画开发系列 矢量图动画
- Windows下 ImportError: cannot import name BeautifulSoup
- 【CodeForces 779B】Weird Rounding(模拟)
- 10个有趣的 Linux 命令