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 (<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

思路
图的广搜(BFS),或者可以看成树的层次遍历。仔细看 输入数据 会发现结构很像图的邻接表,所以用vector<vector<int>>模拟一个图的邻接表。所以:
1.根据数据构造图graph。
2.用队列bfs,记录下孩子最多的一层和最多孩子数。(层次的区分可以依靠插入一个label到队列区分,每当一个label出队时,表示这一层遍历完,并且这一层所有节点的孩子都刚好加入队列等待遍历,所以label出队的同时再插入一个label可以将孩子所在的层级与孩子的孩子所在的层级区分开来)
3.输出记录即可。
代码
#include<iostream>
#include<vector>
#include<queue> //Need to be optimized
using namespace std;
int maxchild = ,level = ; void bfs(int root,const vector<vector<int>>& g)
{
int curlevel = ;
maxchild = ;
int countchild = ;
int label = -;
queue<int> q;
q.push(root);
q.push(label);
while(!q.empty())
{
int f = q.front();
q.pop();
if( f == label)
{
++curlevel;
if(maxchild < countchild)
{
level = curlevel;
maxchild = countchild;
}
countchild = ;
if(q.empty()) //检查下label是不是最后一层的label
break;
q.push(label);
}
else
{
countchild++;
for(int i = ;i < g[f].size();i++)
{
q.push(g[f][i]);
}
}
}
} int main()
{
int N,M;
while(cin >> N >> M)
{
//create graph
vector<vector<int>> graph(N + );
for(int i = ; i <=M;i++)
{
int node,childcount;
cin >> node >> childcount;
vector<int> childs(childcount);
for(int j = ;j < childcount;j++)
cin >> childs[j];
graph[node] = childs;
} bfs(,graph);
cout << maxchild << " " << level;
}
}
 

PAT1094:The Largest Generation的更多相关文章

  1. pat1094. The Largest Generation (25)

    1094. The Largest Generation (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  2. PAT 1094 The Largest Generation[bfs][一般]

    1094 The Largest Generation(25 分) A family hierarchy is usually presented by a pedigree tree where a ...

  3. PAT甲级——1094 The Largest Generation (树的遍历)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/93311728 1094 The Largest Generati ...

  4. PAT (Advanced Level) Practise - 1094. The Largest Generation (25)

    http://www.patest.cn/contests/pat-a-practise/1094 A family hierarchy is usually presented by a pedig ...

  5. PAT_A1094#The Largest Generation

    Source: PAT A1094 The Largest Generation (25 分) Description: A family hierarchy is usually presented ...

  6. 1094 The Largest Generation ——PAT甲级真题

    1094 The Largest Generation A family hierarchy is usually presented by a pedigree tree where all the ...

  7. PTA甲级1094 The Largest Generation (25分)

    PTA甲级1094 The Largest Generation (25分) A family hierarchy is usually presented by a pedigree tree wh ...

  8. 1094. The Largest Generation (25)

    A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level bel ...

  9. PAT A1094 The Largest Generation (25 分)——树的bfs遍历

    A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level bel ...

随机推荐

  1. android资源库

    原文地址:http://blog.csdn.net/xiechengfa/article/details/38830751 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在 ...

  2. mysql_建立索引的优缺点

    http://blog.csdn.net/superit401/article/details/51291603 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.  ...

  3. DB 查询分析器 6.03 在Windows 8 上安装与运行演示

           DB 查询分析器 6.03 在Windows 8 上安装与运行演示 马根峰                ( 广东联合电子服务股份有限公司, 广州 510300) 摘要          ...

  4. BCD码转十进制C语言实现

    #include <stdio.h> #include <stdlib.h> #define uchar unsigned char uchar BCD_Decimal(uch ...

  5. Docker学习笔记【四】Docker 仓库

    访问仓库,仓库是集中从存放镜像的地方.类似Maven. Docker Hub 目前由Docker官方维护的一个公共仓库,其中包括15000的镜像. 注册 在 https://hub.docker.co ...

  6. 每天几分钟跟小猫学前端之node系列:用node实现最简单的爬虫

    先来段求分小视频: https://www.iesdouyin.com/share/video/6550631947750608142/?region=CN&mid=6550632036246 ...

  7. 排序算法入门之选择排序-Java实现

    本文参考http://blog.csdn.net/m0_37568091/article/details/78023705 选择排序是先从对象数组中选出最小的放在第一个位置,再从剩下的元素中选择次小的 ...

  8. linux上安装redis的踩坑过程2

    昨天在linux上安装redis后马上发现了其它问题,服务器很卡,cpu使用率上升,top命令查看下,原来有恶意程序在挖矿,此程序入侵了很多redis服务器,马上用kill杀掉它 然后开始一些安全策略 ...

  9. HBase最佳实践 - 集群规划

    本文由  网易云发布. 作者:范欣欣 本篇文章仅限本站分享,如需转载,请联系网易获取授权. HBase自身具有极好的扩展性,也因此,构建扩展集群是它的天生强项之一.在实际线上应用中很多业务都运行在一个 ...

  10. Failed to create the Java Virtual Machine(zt)

    http://lixueli26.iteye.com/blog/711152 在以下版本也发生类似情况,采用同样方法得以解决. 版本:eclipse-jee-indigo-win32 自己电脑上装的j ...