PAT甲级--The Largest Generation
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲级--The Largest Generation相关的知识,希望对你有一定的参考价值。
题目
轻量翻译(这题应该较为简单看懂)
题目描述
一个家庭等级制度一般由一个家谱来代表,里面在同一等级的结点代表同一时代的人。你的任务是找出人最多的时代。
题目解析
不多说。。和之前的那道数叶子的题目一模一样,我那个已经有很详细的解析了–counting leaves
解题代码
基本变量
int N, M;
bool root[MaxN][MaxN]; //第一维编号代表父结点编号,第二维代表它的孩子编号
queue<int>Q; //用于bfs
pair<int, int>res{1, 1}; //用于存储答案:最大的人数以及它对应的层级
Input函数
void Input() {
ios::sync_with_stdio(false);
cin >> N >> M;
int c = M;
while (c--) { //开始输入M行关系
char num[4]; int t;
cin >> num >> t; //输入有孩子的编号和孩子的个数
int p = atoi(num);
while (t--) {
char num2[4]; //输入孩子的编号
cin >> num2;
int q = atoi(num2);
root[p][q] = 1;
}
}
}
check函数
void check(int node) {//搜索该父节点的孩子,并入队
for (int i = 1; i <= N; i++) {
if (root[node][i])
Q.push(i);
}
}
print函数
void print() { //分清层次bfs遍历打印结果,实际上每层的数量就是每次队列的大小
Q.push(1);
int step = 1;
while (!Q.empty()) {
int sz = Q.size();
if (sz > res.first) {
res.first = sz;
res.second = step;
}
for (int i = sz; i > 0; i--) {
int node = Q.front(); Q.pop();
check(node);
}
step++;
}
cout << res.first << ' ' << res.second;
}
整合代码得答案
#include<bits/stdc++.h>
using namespace std;
#define MaxN 102
int N, M;
bool root[MaxN][MaxN]; //第一维编号代表父结点编号,第二维代表它的孩子编号
queue<int>Q; //用于bfs
pair<int, int>res{1, 1}; //用于存储答案:最大的人数以及它对应的层级
void Input() {
ios::sync_with_stdio(false);
cin >> N >> M;
int c = M;
while (c--) { //开始输入M行关系
char num[4]; int t;
cin >> num >> t; //输入有孩子的编号和孩子的个数
int p = atoi(num);
while (t--) {
char num2[4]; //输入孩子的编号
cin >> num2;
int q = atoi(num2);
root[p][q] = 1;
}
}
}
void check(int node) {//搜索该父节点的孩子,并入队
for (int i = 1; i <= N; i++) {
if (root[node][i])
Q.push(i);
}
}
void print() { //分清层次bfs遍历打印结果,实际上每层的数量就是每次队列的大小
Q.push(1);
int step = 1;
while (!Q.empty()) {
int sz = Q.size();
if (sz > res.first) {
res.first = sz;
res.second = step;
}
for (int i = sz; i > 0; i--) {
int node = Q.front(); Q.pop();
check(node);
}
step++;
}
cout << res.first << ' ' << res.second;
}
int main() {
Input();
print();
return 0;
}
以上是关于PAT甲级--The Largest Generation的主要内容,如果未能解决你的问题,请参考以下文章
PAT 1094. The Largest Generation (层级遍历)
PAT 甲级 1144 The Missing Number
PAT 1094 The Largest Generation[bfs][一般]