当前位置: 首页 > news >正文

L2-026 小字辈

 

本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。

输入格式:

输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。

输出格式:

首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。

输入样例:

9
2 6 5 5 -1 5 6 4 7

输出样例:

4
1 9
#include <iostream>
#include <vector>
#include <set>
#include <string>
#include <iomanip>
#include <algorithm>
using namespace std;
#define M 100000
vector<int> v[M + 5];
int ans[M + 5], ind[M + 5];
void fun(int t, int i) {ans[t] = i;for (auto x : v[t]) {fun(x, i + 1);}return;
}
int main() {int n;cin >> n;int m;for (int i = 1, a; i <= n; i++) {cin >> a;if (a == -1) m = i;else v[a].push_back(i);}fun(m, 1);for (int i = 1; i <= n; i++) ind[i] = i;sort(ind + 1, ind + n + 1, [&](int i, int j)->bool {if (ans[i] != ans[j]) return ans[i] > ans[j];return i < j;});cout << ans[ind[1]] << endl;for (int i = 1; i <= n; i++) {if (ans[ind[i]] != ans[ind[1]]) break;if (i != 1) cout << " ";cout << ind[i];}return 0;
}

http://www.lryc.cn/news/196422.html

相关文章:

  • linux 查看系统版本
  • Python实现PDF转换文件格式
  • 【Ceph Cluster】完全删除Ceph集群
  • 4.Vue-Vue调用第三方接口
  • 大语言模型在推荐系统的实践应用
  • 第三章 交换技术及应用
  • 地震勘探原理部分问题解答
  • 两个步骤轻松搞定批量合并视频
  • VR虚拟现实在室内设计仿真教学中的应用演示
  • Python操作串口通信
  • 图详解第四篇:单源最短路径--Dijkstra算法
  • CRMEB多商户商城系统阿里云集群部署教程
  • Java第三方登录封装工具类
  • BUUCTF学习(四): 文件包含tips
  • 德国人工智能公司【Kodex AI】完成160万欧元融资
  • LeetCode 2 两数相加
  • springboot项目启动失败,不打印报错详细信息(启动打印日记问题)
  • MyBatis (where、set、foreach)标签
  • flutter开发之安装dart
  • 向量召回:深入评估离线体系,探索优质召回方法
  • 播放器缓存队列bug解决方案
  • React拖拽实践
  • Stable Diffusion绘图,lora选择
  • kube-controller-manager和kube-scheduler不能正常启动
  • Mac OS m1 下安装Gradle5.1
  • JUC并发编程面试题(自用)
  • Redis分布式会话
  • 程序员大厂之鹅厂探秘
  • 【Java 进阶篇】深入理解 JavaScript DOM Node 对象
  • 测试用例基础