概述
原题链接PTA | 程序设计类实验辅助教学平台 (pintia.cn)
ACwing链接1584. 最大的一代 - AcWing题库
题意
家庭关系可以用家谱树来表示,同一层上的所有结点都属于同一代人,请你找出人数最多的一代。
分析
1. 此题用的是邻接表存的树,而且是用vector的层次遍历
AC代码
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int N = 200;
int n, m;
bool g[N][N]; // 用来存树的结点间有无边
vector<int>lev[N]; // vector<int>数组
int main()
{
cin >> n >> m;
while(m -- )
{
int id, k;
cin >> id >> k; // 结点编号 和 结点的子节点个数
while(k -- )
{
int son;
cin >> son;
g[id][son] = true; // 表示结点间有边
}
}
lev[1].push_back(1); // 把根节点存进lev[0]里
int l = 1; // 层数为1
while(lev[l].size()) // 某一层结点个数不为0
{
for(auto t : lev[l]) // 遍历这一层的结点
for(int j = 1; j <= n; j ++ )
if(g[t][j]) // 如果存在从 t 到 j的边, 就在下一层把j加入
lev[l + 1].push_back(j);
l ++; // 层数+ 1
}
int k = 1; // 从第一层开始,比较每一层的结点个数,更新k
for(int i = 1; i < l; i ++ )
{
if(lev[i].size() > lev[k].size() )
k = i;
}
cout << lev[k].size() << ' ' << k << endl;
}
最后
以上就是无辜航空为你收集整理的【PAT甲级】1094 The Largest Generation 最大的一代的全部内容,希望文章能够帮你解决【PAT甲级】1094 The Largest Generation 最大的一代所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复