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 ...
随机推荐
- Ubuntu下安装多个JDK,并设置其中一个为默认JDK
由于使用需要,要在机器上同时安装OpenJDK 8和11,并将8设置为默认JDK 首先安装OpenJDK sudo apt-get install openjdk-8-jdk sudo apt-get ...
- 【源码系列#02】Vue3响应式原理(Effect)
专栏分享:vue2源码专栏,vue3源码专栏,vue router源码专栏,玩具项目专栏,硬核推荐 欢迎各位ITer关注点赞收藏 Vue3中响应数据核心是 reactive , reactive 的实 ...
- .NET8极致性能优化CHRL
前言 .NET8在.NET7的基础上进行了进一步的优化,比如CHRL(全称:CORINFO_HELP_RNGCHKFAIL)优化技术,CORINFO_HELP_RNGCHKFAIL是边界检查,在.NE ...
- Hdu4742 (CDQ分治)
题意:给出n个三维点对(x,y,z),可随意排列,求三维非严格最长上升子序列长度和最长上升子序列数量. 输入格式:第一行为一整数T表示用例组数,每组用例第一行为一整数n表示点数,之后n行每行三个整数x ...
- 什么是RPC协议
工作的时候,第一次接触CRPC协议,当时就很懵,啥是CRPC协议,一脸懵逼,于是就到网上去搜,填充知识空缺. 不少解释显得非常官方,我相信大家在各种平台上也都看到过,解释了又好像没解释,都在用一个我们 ...
- java的反应式流
Java的反应式流是一种新的编程模型,它在异步和事件驱动的环境下工作.反应式流的目的是为了解决传统的单线程或者多线程编程模型在高并发和大流量情况下的性能瓶颈. 反应式流的核心是Observable和O ...
- Filter拦截问题
关于Filter拦截问题 刚开始我创建了个servlet项目一直拦截不成功 首先是因为导包的问题 import javax.servlet.*; 必须是这个包才有 第一个这个Javax.se ...
- U盘加密技术有哪些先进的保护措施?
华企盾DSC数据防泄密系统的U盘加密技术采用了一系列先进的保护措施,以确保高水平的数据安全.系统采用强大的加密算法,如AES256(高级加密标准),确保对U盘中的数据进行不可逆的强加密,防范了未经授权 ...
- 华企盾DSC服务器状态显示“服务未安装”
在cmd中先删除原服务:sc delete DSEServer 然后重新创建DSEServer所在位置:sc create "DSEServer" binpath= "C ...
- ElasticSearch之cat task management API
命令样例如下: curl -X GET "https://localhost:9200/_cat/tasks?v=true&pretty" --cacert $ES_HOM ...