L2-026 小字辈 (25 point(s)) (BFS)
补题链接:Here
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。
输入格式:
输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。
输出格式:
首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。
输入样例:
9
2 6 5 5 -1 5 6 4 7
输出样例:
4
1 9
这道题只需要简单的 BFS 搜索一下就可以了
AC 代码
#include <bits/stdc++.h>
using namespace std;
#define Max 100005
vector<int> vec[Max]; //// 用来存图的
set<int> m; // 保存结点的
int fa = 1; // 记录最大字辈的下标
int bfs() {
queue<int> q;
int daishu = 0; // 记录代数,题目第一个数据让我们输出有多少代人
q.push(fa); // 之前记录的最大辈分,把它压到队列,进行bfs
q.push(-1); // 这个 -1 ,相当是一个标记变量, 说明这一层结束了,
int flog = 0; // 看它有没有孩子的标记变量
while (!q.empty()) {
int t = q.front();
if (t == -1) { /// -1 ,说明遍历完这一代人了,
daishu++; // 代数++
if (flog == 1) // 有孩子, flog == 1 ,清空set
m.clear();
flog = 0; //
q.pop();
q.push(
-1); // 这一代人的孩子都压到队列了,说明下一代人都遍历完了,压
// -1 到队列中
t = q.front();
}
q.pop();
if (t == -1)
continue;
// cout<<t<<" ";
for (int i = 0; i < vec[t].size(); i++) {
q.push(vec[t][i]); // 把 t 的孩子都压到队列中
flog = 1; // 这一代人,有孩子, flog == 1
}
m.insert(t); //
}
return daishu;
// cout<<" daishu = "<<daishu<<endl;
}
int main() {
int a;
cin >> a;
for (int i = 1; i <= a; i++) {
int temp;
cin >> temp;
if (temp == -1) {
if (a == 1) {
cout << "1" << endl;
cout << i << endl;
return 0;
}
fa = i; // 当前字辈是最大字辈,记录下来
continue;
}
vec[temp].push_back(
i); // 当前 i 是 temp的一个孩子,那么就是temp有一个孩子,指向i
}
cout << bfs() << endl;
set<int>::iterator it;
for (it = m.begin(); it != m.end(); it++) {
if (it == m.begin())
cout << *it;
else
cout << " " << *it;
}
// cout<<"A"<<endl;
return 0;
}
L2-026 小字辈 (25 point(s)) (BFS)的更多相关文章
- PAT 甲级 1021 Deepest Root (25 分)(bfs求树高,又可能存在part数part>2的情况)
1021 Deepest Root (25 分) A graph which is connected and acyclic can be considered a tree. The heig ...
- PAT Advanced 1106 Lowest Price in Supply Chain (25) [DFS,BFS,树的遍历]
题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...
- PAT Advanced 1079 Total Sales of Supply Chain (25) [DFS,BFS,树的遍历]
题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...
- L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...
- 51nod 1444 破坏道路(bfs+枚举)
1444 破坏道路 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 在某一个国家,那儿有n个城市,他们通过m条双向 ...
- ZOJ 1091 Knight Moves(BFS)
Knight Moves A friend of you is doing research on the Traveling Knight Problem (TKP) where you are t ...
- Python_sklearn机器学习库学习笔记(三)logistic regression(逻辑回归)
# 逻辑回归 ## 逻辑回归处理二元分类 %matplotlib inline import matplotlib.pyplot as plt #显示中文 from matplotlib.font_m ...
- sklearn基础知识-准备阶段
6.标签特征二元化 处理分类变量还有另一种方法,不需要通过OneHotEncoder,我们可以用LabelBinarizer. 这是一个阈值与分类变量组合的方法. In [1]: from sklea ...
- 自学Python2.2-基本数据类型-列表list(object)
Python List方法总结 一. 列表简介: 列表是序列对象,可包含任意的Python数据信息,如字符串.数字.列表.元组等 列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加.修改 ...
- python的函数式编程
map #对参数迭代器中的每个元素进行操作,返回一个新的迭代器 map(func, *iterables) --> map object Make an iterator that comput ...
随机推荐
- Vite4+Typescript+Vue3+Pinia 从零搭建(4) - 代码规范
项目代码同步至码云 weiz-vue3-template 要求代码规范,主要是为了提高多人协同和代码维护效率,结合到此项目,具体工作就是为项目配置 eslint 和 prettier. editorc ...
- Excel表格存在不同大小的合并单元格怎么排序?
当Excel表格中存在不同大小的合并单元格时,进行排序可能会出现一些难题.因为合并单元格会影响数据的布局,导致排序结果不符合预期. 下面我将详细介绍如何在包含不同大小合并单元格的Excel表格中进行排 ...
- [CF1854D] Michael and Hotel
题目描述 Michael and Brian are stuck in a hotel with $ n $ rooms, numbered from $ 1 $ to $ n $ , and nee ...
- [ABC311G] One More Grid Task
Problem Statement There is an $N \times M$ grid, where the square at the $i$-th row from the top and ...
- 9 "网址"--URI
目录 URI和URL URI详细介绍 URI的组成 URI的查询参数 URI的编码 疑问 URI和URL URI:统一资源标识符(Uniform Resource Identifier) 有两种形式: ...
- 记一次 .NET某股票交易软件 灵异崩溃分析
一:背景 1. 讲故事 在dump分析的旅程中也会碰到一些让我无法解释的灵异现象,追过这个系列的朋友应该知道,上一篇我聊过 宇宙射线 导致的程序崩溃,后来我又发现了一例,而这一例恰恰是高铁的 列控连锁 ...
- 动态规划问题(六)最长公共子序列(LCS)
问题描述 给你两个字符串,要求得到这两个字符串的最长公共子序列长度. 比如:对于输入的字符串 S1 "AGGTAB" 和 S2 "GXTXAYB",它们 ...
- 《Span-Based Joint Entity and Relation Extraction with Transformer Pre-Training》阅读笔记
代码 原文地址 预备知识: 1.什么是束搜索算法(beam search)? beam search是一种用于许多自然语言处理和语音识别模型的算法,作为最终决策层,用于在给定目标变量(如最大概 ...
- 初探 Linux Cgroups:资源控制的奇妙世界
Cgroups 是 linux 内核提供的功能,由于牵涉的概念比较多,所以不太容易理解.本文试图通过简单的描述和 Demo 帮助大家理解 Cgroups . 如果你对云原生技术充满好奇,想要深入了解更 ...
- 昇腾实战丨DVPP媒体数据处理图片解码问题案例
摘要:本期就分享几个关于DVPP图片解码问题的典型案例,并给出原因分析及解决方法. 本文分享自华为云社区<DVPP媒体数据处理图片解码问题案例>,作者:昇腾CANN . DVPP(Digi ...