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

L2-026 小字辈 - java

L2-026 小字辈


时间限制
400 ms
内存限制
64 MB


题目描述:

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

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

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

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


给定n个数,第i个编号代表第i个人的父母
让你求出最小的辈分以及最小辈分的成员编号


emmmmmmm

1、dfs搜索
先找出根节点,然后依据根节点往下建树
统计并更新最下面的叶子节点

2、并查集
可以利用并查集去实现,找爹爹的同时,辈分加起来


1、dfs搜索

java 过不了,欸

import java.io.*;
import java.math.*;
import java.util.*;public class Main
{static int N = (int) 1e5;static ArrayList<Integer> map[] = new ArrayList[N + 10];static HashSet<Integer> set = new HashSet<Integer>();static int maxDeep = 0;//	node节点, deep辈分static void dfs(int node, int deep){
//		同辈份if (deep == maxDeep) set.add(node);
//		找到再小的辈分else if (deep > maxDeep){
//			更新最小的辈分maxDeep = deep;set.clear();set.add(node);}//		遍历该辈分下的孩子for (int i = 0; i < map[node].size(); i++)dfs(map[node].get(i), deep + 1);}public static void main(String[] args){int n = sc.nextInt();for (int i = 1; i <= n; i++)map[i] = new ArrayList<Integer>();int root = -1;for (int i = 1; i <= n; i++){int x = sc.nextInt();
//			找到老祖宗if (x == -1){root = i;continue;}map[x].add(i);}dfs(root, 1);out.println(maxDeep);int count = 0;for (int i : set){if (count++ != 0)out.print(" ");out.print(i);}out.flush();out.close();}static Scanner sc = new Scanner(System.in);static PrintWriter out = new PrintWriter(System.out);
}

c++

#include <bits/stdc++.h>using namespace std;const int N = 1e5;
vector<int> mp[N + 10];
set<int> s;
int maxDeep = 1;void dfs(int node, int deep)
{if(deep == maxDeep)s.insert(node);else if(deep > maxDeep){s.clear();s.insert(node);maxDeep = deep;}for(int i = 0; i < mp[node].size(); i ++)dfs(mp[node][i], deep + 1);
}int main()
{int n; scanf("%d", &n);int root = -1;for(int i = 1; i <= n; i ++){int x; scanf("%d", &x);if(x == -1){root = i;continue;}mp[x].push_back(i);}dfs(root, 1);printf("%d\n", maxDeep);for(auto it = s.begin(); it != s.end(); it ++){if(it != s.begin())printf(" ");printf("%d", *it);}return 0;
}

2、 并查集

java 还不是不知道为啥错了两个点

import java.io.*;
import java.math.*;
import java.util.*;public class Main
{static int N = (int) 1e5;static int shu[] = new int[N + 10];static int deep[] = new int[N + 10];static int find(int x){
//		祖宗节点if (shu[x] == -1)deep[x] = 1;//		当前的辈分需要更新if (deep[x] == 0)deep[x] = find(shu[x]) + 1;return deep[x];}public static void main(String[] args){int n = sc.nextInt();for (int i = 1; i <= n; i++)shu[i] = sc.nextInt();int max = 1;for (int i = 1; i <= n; i++)max = Math.max(max, find(i));out.println(max);int cnt = 0;for (int i = 1; i <= n; i++){if (max == deep[i]){if (cnt++ != 0)out.print(" ");out.print(i);}}out.flush();out.close();}static Scanner sc = new Scanner(System.in);static PrintWriter out = new PrintWriter(System.out);
}

c++

#include <bits/stdc++.h>using namespace std;const int N = 1e5;
int shu[N + 10];
int deep[N + 10];int find(int x)
{if(shu[x] == -1)deep[x] = 1;if(deep[x] == 0)deep[x] = find(shu[x]) + 1;return deep[x];
}int main()
{int n; scanf("%d", &n);for(int i = 1; i <= n; i ++)scanf("%d", &shu[i]);int mx = 1;for(int i = 1; i <= n; i ++) mx = max(mx, find(i));printf("%d\n", mx);int cnt = 0;for(int i = 1; i <= n; i ++){if(deep[i] == mx){if(cnt ++ != 0)printf(" ");printf("%d", i);}}return 0;
}

ArrayList
ArrayList

dfs
dfs

并查集
并查集


如果有说错的 或者 不懂的 尽管提 嘻嘻

一起进步!!!


闪现

相关文章:

L2-026 小字辈 - java

L2-026 小字辈 时间限制 400 ms 内存限制 64 MB 题目描述&#xff1a; 本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 输入格式&#xff1a; 输入在第一行给出家族人口总数 N&#xff08;不超过 100 000 的正整数&#xff09; —— 简单起见&#xff0c…...

排序算法-堆积树排序法(HeapSort)

目录 排序算法-堆积树排序法&#xff08;HeapSort&#xff09; 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法&#xff08;HeapSort&#xff09; 1、说明 堆积树排序法是选择排序法的改进版&#xff0c;可以减少在选择排序法中的比较次数&#xff0c;进而减少排序…...

名词解释 MongoDB

MongoDB 是一个面向文档的数据库管理系统&#xff0c;它不使用传统的表格结构&#xff0c;而是将数据组织成类似文档的形式&#xff0c;通常使用JSON格式。 文档数据库&#xff1a;数据以文档的形式存储&#xff0c;每个文档可以包含不同的字段&#xff0c;就像一个文件可以包…...

Look Back(cf div3 905)

题意&#xff1a;给你一个长度为n&#xff08;(1≤n≤10^5)数组a[]&#xff0c;你可以进行一个操作 使a[i]a[i]*2,问最少经过多少次这样的操作使的a[]不递减,a[i]>a[i-1]。 输入样例&#xff1a; 6 1 1 2 1 1 3 1 2 1 4 2 3 2 1 5 4 5 4 5 4 10 1 7 7 2 3 4 3 2 1 100 输出…...

Spring框架的发展历程

Spring框架的发展历程 自2004年以来&#xff0c;Spring框架已经成为Java开发人员最受欢迎的开源框架之一。它提供了一个全面的编程和配置模型&#xff0c;旨在简化企业级Java应用程序的开发过程。本文将详细介绍Spring框架的发展历程&#xff0c;以及它如何为Java开发人员提供…...

vue 级联查询5级--省/市/区/街道/社区

<template> <div> 1234 <el-select v-model="provinceVal" @change="selectProvinceFn" placeholder="请选择"> <el-option v-for="item in provinceList" :key="item.code" :label="item.name&q…...

C++并发与多线程(8) | 互斥量

一、互斥量(mutex)的基本概念 互斥量(Mutex)是一种用于多线程编程的同步机制,用于管理共享资源的访问,以确保线程之间不会同时访问某个共享资源,从而避免竞态条件(Race Condition)和数据损坏。下面是互斥量的基本概念: 互斥性(Mutual Exclusion):互斥量用于确保一…...

Power BI 傻瓜入门 3. 选择Power BI的版本

本章内容包括&#xff1a; Excel与Power BI的比较选择Power BI的桌面版和服务版之间的差异了解Microsoft提供的许可选项 挑选正确版本的Power BI可能就像参观世界上最大的糖果店&#xff1a;你可以从许多细微差别的替代品中进行选择。选择可以归结为想要、需要、规模&#xf…...

BadNets:基于数据投毒的模型后门攻击代码(Pytorch)以MNIST为例

加载数据集 # 载入MNIST训练集和测试集 transform transforms.Compose([transforms.ToTensor(),]) train_loader datasets.MNIST(rootdata,transformtransform,trainTrue,downloadTrue) test_loader datasets.MNIST(rootdata,transformtransform,trainFalse) # 可视化样本 …...

freeRTOS内部机制——栈的作用

上图中*pa 和*pb分别为R0&#xff0c;R1&#xff0c;调用C函数时&#xff0c;第一个参数保存在R0中第二个参数保存在R1中。这是约定。 指令保存在哪里&#xff1f; 指令保存在flash上面 LR等于什么? LR是返回地址&#xff0c;函数执行完了过后LR等于下一条指令的地址 运行…...

python 桌面软件开发-matplotlib画图鼠标缩放拖动

继上一篇在 Java 中缩放拖动图片后&#xff0c;在python matplotlib中也来实现一个自由缩放拖动的例子&#xff1a; python matplotlib 中缩放&#xff0c;较为简单&#xff0c;只需要通过设置要显示的 x y坐标的显示范围即可。基于此&#xff0c;实现一个鼠标监听回调&#xf…...

【JavaScript基础】JavaScript头等函数的理解

彻底理解JavaScript头等函数 一、函数的理解 &#x1f525; 什么是函数&#xff1f; 一般来说&#xff0c;一个函数是可以通过外部代码 调用 的一个“子程序”&#xff08;或在递归的情况下由内部函数调用&#xff09;。像程序本身一样&#xff0c;一个函数由称为函数体的一…...

如何把项目上传到Gitee(详细教程)

找到项目根目录右键打开Git Bash Here 输入命令&#xff1a;git init 回车 输入命令&#xff1a;git status 输入命令&#xff1a;git add . 输入命令&#xff1a;git status git commit -m 项目描述 在Gitee官网注册好账号后&#xff0c;git 新建项目 填写补充git项目信息及…...

Ubuntu挂载windows下的共享文件夹

Ubuntu挂载windows下的共享文件夹 更新apt源 如果出现安装失败&#xff0c;需要更新apt源为阿里云 # 备份原始文件 sudo cp /etc/apt/sources.list.d/* /etc/apt/sources.list.d.bak/# 修改文件内容 sudo vim /etc/apt/sources.list# 替换内容为如下 deb https://mirrors.al…...

什么是WMS系统条码化管理

WMS系统是一种用于仓库管理的信息化系统&#xff0c;旨在提高仓库操作的效率和准确性。而在WMS系统中&#xff0c;条码化管理是一项关键的技术和方法&#xff0c;它通过将商品和物料打上条码&#xff0c;并利用扫描设备进行数据采集和处理&#xff0c;实现了仓库管理的全面自动…...

【云原生之kubernetes实战】在k8s环境下部署moredoc文库系统

【云原生之kubernetes实战】在k8s环境下部署moredoc文库系统 一、moredoc介绍1.1 moredoc简介1.2 moredoc技术栈二、本次实践介绍2.1 本次实践简介2.2 本次环境规划三、检查k8s环境3.1 检查工作节点状态3.2 检查系统pod状态四、创建mysql的secret资源4.1 创建部署目录4.2 创建密…...

[Database] MySQL 8.x Window / Partition Function (窗口/分区函数)

&#x1f9f2;相关文章 [1] MySQL 系统表解析以及各项指标查询 [2] MySQL 5.7 JSON 字段的使用的处理 [3] MySQL经典练习50题 简介 MySQL 8.0版本开始支持窗口函数 官方文档 在之前的版本中已存在的大部分聚合函数&#xff0c;在MySQL 8 中也可以作为窗口函数来使用 方法 / …...

openGauss Meetup(天津站)精彩回顾 | openGauss天津用户组正式成立

由openGauss社区、天开发展集团、天津市软件行业协会、天大智图&#xff08;天津&#xff09;科技有限公司联合主办的“openGauss Meetup • 天津站”已于10月13日落下帷幕&#xff0c;此次活动邀请到众多业内技术专家&#xff0c;从技术创新、学术创新、发展创新、以及生态共建…...

linux vim 删除多行

使用linux服务器&#xff0c;免不了和vi编辑打交道&#xff0c;命令行下删除数量少还好&#xff0c;如果删除很多&#xff0c;光靠删除键一点点删除真的是头痛&#xff0c;还好Vi有快捷的命令可以删除多行、范围。 删除行 在Vim中删除一行的命令是dd。 以下是删除行的分步说明…...

低概率Bug,研发敷衍说复现不到

测试工作中&#xff0c;经常会遇到一些低概率出现的问题&#xff0c;如果再是个严重问题&#xff0c;那测试人员的压力无疑是很大的&#xff0c;一方面是因为低概率难以复现&#xff0c;另一面则是来自项目组的压力。 如何在测试时减少此类问题的重复投入&#xff0c;我的思考如…...

ClawdBot代码实例:修改clawdbot.json实现模型热切换实操

ClawdBot代码实例&#xff1a;修改clawdbot.json实现模型热切换实操 1. 引言&#xff1a;你的个人AI助手&#xff0c;想换模型就换模型 想象一下&#xff0c;你有一个24小时在线的AI助手&#xff0c;它能帮你写代码、回答问题、整理文档。但用久了&#xff0c;你可能会想&…...

ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光

第一章&#xff1a;ZGC停顿时间为何突然飙升&#xff1f;3个被90%团队忽略的配置雷区曝光 ZGC&#xff08;Z Garbage Collector&#xff09;以亚毫秒级停顿著称&#xff0c;但生产环境中频繁出现 10–50ms 甚至更高停顿&#xff0c;往往并非内存压力所致&#xff0c;而是源于几…...

如何快速上手AutoGPT-Next-Web:5分钟搭建专属AI助手

如何快速上手AutoGPT-Next-Web&#xff1a;5分钟搭建专属AI助手 【免费下载链接】AutoGPT-Next-Web &#x1f916; Assemble, configure, and deploy autonomous AI Agents in your browser.一键免费部署你的私人AutoGPT 网页应用 项目地址: https://gitcode.com/gh_mirrors/…...

SMUDebugTool核心功能全解析:从故障排查到性能优化

SMUDebugTool核心功能全解析&#xff1a;从故障排查到性能优化 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitco…...

java打卡学习6:集合框架 Collection

集合框架概述集合框架&#xff08;Collection Framework&#xff09;是Java中用于存储、操作和传输数据的标准化架构。它提供了一组接口、实现类和算法&#xff0c;用于处理对象集合&#xff0c;简化了数据结构的操作。核心目标&#xff1a;性能优异&#xff1a;提供不同数据结…...

终端里的“皇帝新衣”:扒开 Claude Code 的源码,我看到了 Agent 的求生欲

下午三点&#xff0c;阳光斜着打在机械键盘的侧边&#xff0c;你刚解决完一个诡异的内存溢出&#xff0c;正打算接杯咖啡。 顺手更新了 Anthropic 刚发布的 Claude Code&#xff0c;这个号称能直接在终端里帮你写代码、改 bug、跑测试的“神级工具”。 [外链图片转存中…(img…...

5G RedCap路由器如何选?关键特性解析与典型应用场景指南

1. 5G RedCap路由器选购的核心指标 第一次接触5G RedCap路由器时&#xff0c;我被参数表里密密麻麻的术语搞得头晕眼花。后来在工业现场实测了7款不同型号后&#xff0c;才发现真正影响使用体验的关键指标其实就这几个&#xff1a; 频段支持就像路由器的"语言能力"。…...

DLSS Swapper革新性图形优化工具:一键提升游戏帧率最高达40%的开源解决方案

DLSS Swapper革新性图形优化工具&#xff1a;一键提升游戏帧率最高达40%的开源解决方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款开源的图形优化工具&#xff0c;专为游戏玩家打造&#xff0c…...

AXOrderBook:解密A股订单簿重建与FPGA硬件加速的深度技术方案

AXOrderBook&#xff1a;解密A股订单簿重建与FPGA硬件加速的深度技术方案 【免费下载链接】AXOrderBook A股订单簿工具&#xff0c;使用逐笔行情进行订单簿重建、千档快照发布、各档委托队列展示等&#xff0c;包括python模型和FPGA HLS实现。 项目地址: https://gitcode.com…...

IDEA使用maven打包Java项目,跳过test的3种方法

文章目录第一种&#xff1a;命令行第二种&#xff1a;pom.xml设置第三种&#xff1a;IDEA工具操作第一种&#xff1a;命令行 命令行的方式&#xff0c;在哪输入命令都行。 mvn install -Dmaven.test.skiptrue第二种&#xff1a;pom.xml设置 修改pom.xml文件 <build>&…...