补题链接: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)的更多相关文章

  1. 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 ...

  2. PAT Advanced 1106 Lowest Price in Supply Chain (25) [DFS,BFS,树的遍历]

    题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...

  3. PAT Advanced 1079 Total Sales of Supply Chain (25) [DFS,BFS,树的遍历]

    题目 A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)– everyone in ...

  4. L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...

  5. 51nod 1444 破坏道路(bfs+枚举)

    1444 破坏道路 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 在某一个国家,那儿有n个城市,他们通过m条双向 ...

  6. ZOJ 1091 Knight Moves(BFS)

    Knight Moves A friend of you is doing research on the Traveling Knight Problem (TKP) where you are t ...

  7. Python_sklearn机器学习库学习笔记(三)logistic regression(逻辑回归)

    # 逻辑回归 ## 逻辑回归处理二元分类 %matplotlib inline import matplotlib.pyplot as plt #显示中文 from matplotlib.font_m ...

  8. sklearn基础知识-准备阶段

    6.标签特征二元化 处理分类变量还有另一种方法,不需要通过OneHotEncoder,我们可以用LabelBinarizer. 这是一个阈值与分类变量组合的方法. In [1]: from sklea ...

  9. 自学Python2.2-基本数据类型-列表list(object)

    Python List方法总结 一. 列表简介: 列表是序列对象,可包含任意的Python数据信息,如字符串.数字.列表.元组等   列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加.修改 ...

  10. python的函数式编程

    map #对参数迭代器中的每个元素进行操作,返回一个新的迭代器 map(func, *iterables) --> map object Make an iterator that comput ...

随机推荐

  1. 8.0的新特性 -- invisible(不可见索引)

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin invisible index 不可见索引 以前的版本,假如这个索引无用了会怎么样?那就只能是drop掉了.但是dro ...

  2. MySQL-管理员root@'locahost' 丢失,怎么处理?

    版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin 跳过授权表 ----> 不开启验证功能(无密码登录) --skip-grant-tables 阻止所有tcp/i ...

  3. 【Javaweb】html frame标签的使用 | 导航栏右侧内容的实现

    问题的产生: 是我和同伴做了一个导航栏,但是我们不知道怎么实现右侧内容的切换 然后我们查了很多资料,但是有一些是垂直的,但是就如图可见,我们是水平的,那么怎么实现水平切换呢? 上网看到了frame标签 ...

  4. Git 安装与配置教程

    一.下载Git 1.官网地址 下载地址 2.下载 二.安装 1.下载完成后,直接点击安装包安装,即可. 2.开始安装,然后下一步 3.可以在此处自定义地址,然后下一步 3.选择组件 此处默认即可,但我 ...

  5. Nginx根据Origin配置禁止跨域访问策略

    产品需要通过某所的安全测评扫描,其中提出一个关于跨域策略配置不当的问题,如下: 这个需要根据客户端传递的请求头中的Origin值,进行安全的跨站策略配置,目的是对非法的origin直接返回403错误页 ...

  6. [QOJ4815] Flower's Land

    简要题意:给出一个 \(n\) 个点的树,对某个点 \(i\) 求包含某一个点的大小为 \(k\) 的权值最大的连通块,一个连通块的权值是其所有点的权值之和. \(n\le 40000,k\le \m ...

  7. [ABC265D] Iroha and Haiku (New ABC Edition)

    Problem Statement There is a sequence $A=(A_0,\ldots,A_{N-1})$ of length $N$. Determine if there exi ...

  8. 给祖传系统做了点 GC调优,暂停时间降低了 90%

    问题描述 公司某规则引擎系统,在每次发版启动会手动预热,预热完成当流量切进来之后会偶发的出现一次长达1-2秒的Young GC(流量并不大,并且LB下的每个节点都会出现该情况) 在这次长暂停之后,每一 ...

  9. zookeeper JavaApi 修改节点

    *修改数据 * 1.修改数据 * 2.根据版本修改 * * * */ @Test public void testSet() throws Exception{ Stat stat = new Sta ...

  10. C++学习笔记九:值,常量,常表达式和常初始化

    1. 值: Literal: Data that is directly represented in code without going through some other variable s ...