PTA|小字辈

题目

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

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

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

输入样例:
9
2 6 5 5 -1 5 6 4 7
输出样例:
4
1 9

思路

感觉和无向图的并查集很相似都是找父母
//成员:1 2 3 4 5 6 7 8 9
//父母:2 6 5 5 -1 5 6 4 7
//第i个编号对应第i位成员的父母 == 第1个编号(即2) 对应第一位成员的父母
//第2个编号(即6)对应第二位成员的父母 == 2的父母为6
//3的父母是5,4的父母是5,5的父母为-1,6的父母是5
//最终形成图(最开始的5 的父母就是-1即祖宗,下面一次是它的儿女子孙,很像树,但不是二叉树,树的结点是父母,叶子是子女)
在这里插入图片描述

解题代码1

#include <iostream>
#define MAXN 10005 
using namespace std;
int main(){int N,p[MAXN],minG = maxG = 1//初始化最大最小辈分int g[MAXN] = {0};//记录每个成员的辈分int a[MAXN];int count=0;cin>>N;for(int i = 1 ;i<= N ;i ++){cin>>p[i];//祖宗 if(p[i] = -1) countinue;//确定父母的辈分 if(g[p[i]] == 0){g[p[i]] == maxG + 1;maxG++;}//更新儿女的辈分 g[i] = g[p[i]] + 1;//更新最大辈分 if(g[i] > maxG) maxG = g[i];if(g[i] < minG) minG = g[i];} //输出辈分数目 cout<<minG;//找最小辈分存在哪些人 for(int i = 1; i<= N ;i ++){if(g[i] == minG) m[count++] = i;} //输出最小辈分存在的人 for(int i = 0 ; i < count;i++){cout<<m[i];if(i < count-1) cout<<" ";}cout<<endl;
}

解题代码2

#include<iostream>
using namespace std;
int father[100000];
int beifen[100000] = {0};//所有人为0
int Find(int m){if(father[m] == -1) //父母是祖宗 beifen[m] = 1;//辈分就是 1else if(beifen[m] == 0)//辈分还未确定 beifen[m] = Find(father[m])+1; // 找父母的辈分,那自己的辈分是父母的+1 return beifen[m];
}
int main(){int n,i,j;int max = 0,flag = 0 , count = 0;cin>>n;for(i = 1 ; i <= n ; i++) cin>>father[i];//设置每个人是自己的父母for( i = 1 ; i <= n ; i++)Find(i);//找父母 for( i = 1 ; i <= n ; i ++)//辈分更新 if(beifen[i]>max)max = beifen[i];cout<<max<<endl;//输出最大辈分 for( i = 1 ; i <= n ; i++) if(beifen[i] == max) count++;//记录辈分最大的人数 for( i = 1 ; i <= n ; i++){if(beifen[i] == max){if(flag == count - 1) cout<<i;//flag 计数确定最大辈分人的输出格式即确保最后有无空格 else {cout<<i<<" ";flag += 1;}}}cout<<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/674611.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据仓库项目---Day01

文章目录 框架的安装包数据仓库概念项目需求及架构设计项目需求分析项目框架技术选型系统数据流程设计框架版本选型集群资源规划设计 数据生成模块数据埋点主流埋点方式埋点数据上报时机 服务器和JDK准备搭建三台Linux虚拟机(VMWare)编写集群分发脚本xsyncSSH无密登录配置JDK准…

C++之类与对象

1、类声明 2、共有、私有、保护成员。&#xff08;就比如说你一个变量是private的&#xff0c;然后在main函数中&#xff0c;就调用不了&#xff0c;只能在这个类.cpp中调用&#xff09; 3、数据抽象和封装 4、内联函数 内存体积会增大&#xff0c;以空间换时间&#xff1a;编…

Linux实现Flappy bird项目

目录 1、项目介绍 2、功能总结 3、前期准备 3.1 Ncurses库 3.2 信号机制 3.2.1 设置信号响应方式 3.2.2 设置定时器 4、代码实现 4.1 头文件引用及变量、函数定义 4.2 主函数 4.3 curses初始化 4.4 设置定时器 4.5 定时器响应函数 4.6 小鸟控制相关函数 4…

如何复制本地docker镜像到其他主机

&#xff08;1&#xff09;打包镜像 比如我要复制的镜像是grafana的镜像 docker images 这里我把打包的镜像放在了根~目录下&#xff0c;如截图所示&#xff1a; docker save grafana/grafana:latest -o ~/grafana.jar &#xff08;2&#xff09;移动镜像 scp命令拷贝镜像到目标…

【机器学习系统的构建】从模型开发的过程讲清楚K-Fold 交叉验证 (Cross-Validation)的原理和应用

0、前言 最近在学习集成学习的时候了解到了k折交叉验证&#xff0c;其实在之前学习吴恩达老师的课程中也学过交叉验证&#xff0c;但是当时也不是很明白。这次借着自己的疑问以及网上搜找资料&#xff0c;终于把交叉验证给弄明白了。 在弄清楚前&#xff0c;我有这样几个疑问…

【数据分享】2022年中国1km分辨率的河网密度数据(免费获取)

水系数据是我们在各项研究中经常使用的数据&#xff01;之前我们分享过一份来源于Open Street Map的2024年全国水系数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享一份来源于Science Data Bank平台上的2022年中国1km分辨率的河网密度数据&am…

Amazon Q Business现已正式上市!利用生成式人工智能协助提高员工生产力

在 2023 年度 AWS re:Invent 大会上&#xff0c;我们预览了 Amazon Q Business&#xff0c;这是一款基于生成式人工智能的助手&#xff0c;可以根据企业系统中的数据和信息回答问题、提供摘要、生成内容额安全地完成任务。 借助 Amazon Q Business&#xff0c;您可以部署安全、…

Skywalking数据持久化与自定义链路追踪

学习本篇文章之前首先要了解一下Sky walking的基础知识 分布式链路追踪工具Skywalking详解 一&#xff0c;Sky walking数据持久化 Sky walking提供了es&#xff0c;MySQL等数据持久化方案&#xff0c;默认使用h2基于内存的数据库&#xff0c;重启之后数据即会丢失。 在实际工…

纹理映射技术在AI去衣应用中的关键作用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理领域中的应用也日益广泛。AI去衣&#xff0c;作为一种颇具争议的技术应用&#xff0c;指的是利用深度学习算法自动移除或替换图片中的衣物。在这一过程中&#xff0c;纹理映射技术扮演了不可或缺的角色。本…

python环境下labelImg图片标注工具的使用

labelimg GitHub地址 python环境下labelImg图片标注工具的使用 1. 写在开头2. 如何使用2.1安装2.2 启动2.2.1 先启动后设置标注的目录2.2.2 指定标注的目录和预设置的标签 2.3 设置自动保存和显示类别。2.4 保存文件类型2.5 [快捷键](https://github.com/HumanSignal/labelImg…

我独自升级崛起下载方法分享 下载教程

《我独自升级&#xff1a;崛起》这款精彩绝伦的动作角色扮演游戏&#xff0c;灵感来源于大热网络漫画&#xff0c;让玩家亲自踏上主角程肖宇的征途&#xff0c;从觉醒初阶到实力飞跃&#xff0c;每一步成长都扣人心弦。值得注意的是&#xff0c;尽管全球正式发布日期定在了五月…

每天五分钟计算机视觉:通过交并比判断对象检测算法的性能

本文重点 在对象检测领域,交并比(Intersection over Union,简称IoU)是衡量算法性能的重要指标之一。它不仅直观地反映了预测框与真实框之间的重叠程度,还是判断算法是否“运行良好”的关键依据。 那个定位是好的? 对象检测任务中,我们希望不仅检测到对象,同时我们还希…