左孩子右兄弟 蓝桥杯1451 python

news/2024/11/17 23:24:46/

题目描述

对于一棵多叉树,我们可以通过 “左孩子右兄弟” 表示法,将其转化成一棵二叉树。

如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一。

换句话说,每个结点可以选任意子结点作为左孩子,并按任意顺序连接右兄弟。

给定一棵包含 N​​ 个结点的多叉树,结点从 1​​ 至 N​ 编号,其中 1 号结点是根,每个结点的父结点的编号比自己的编号小。

请你计算其通过 “左孩子右兄弟” 表示法转化成的二叉树,高度最高是多少。

注:只有根结点这一个结点的树高度为 0​。

输入描述

输入的第一行包含一个整数 N​​​。 以下 N−1​​ 行,每行包含一个整数,依次表示 2​ 至 N 号结点的父结点编号。

输出描述

输出一个整数表示答案。

输入输出样例

示例 1

输入

5
1
1
1
2

输出

4

 思路:创建一个邻接表,把每一行输入的数字挨个存进去,最大深度就是孩子的数量,加上以这个孩子节点为父节点的孩子数量,以此类推

# 树形DP
g = [[] for j in range(1, 100010)] # 邻接表
dp = [0] * 100010
def dfs(u):dp[u] = len(g[u]) # 全部变为左孩子,那么长度就是孩子的数量maxv = 0for v in g[u]:#以当前孩子节点为父节点,寻找下一个孩子节点dfs(v) # DFS孩子maxv = max(dp[v], maxv) # 取最大深度dp[u] += maxv # 每次加上最大深度
n = int(input())
for i in range(2, n + 1):v = int(input())g[v].append(i)
dfs(1)
print(dp[1])


http://www.ppmy.cn/news/38518.html

相关文章

进程与线程(一)

进程的概念、组成、特征 程序:是静态的,就是个存放在磁盘里的可执行文件,如:xx.exe 进程:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。 同一个程序多次执行会对应多个进程。 进…

USB3.0芯片FT601Q简介及FPGA实现

FT601Q介绍 FT601Q 是 FTDI 推出的一款超高速 USB3.0 芯片,提供高达 5Gbps 的带宽。该芯片不需要额外的固件开发,共有 4 个写通道和 4 个读通道,每个通道的缓冲大小均为 4KB。FT601Q 具有多种工作模式,本文介绍并实现相对简单的同…

Spring 中经典的 9 种设计模式

1 简单工厂(非23种设计模式中的一种) 1 1 实现方式: BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 1.2 实质&a…

深度学习个人整理

深度学习 概念 DL Deep Learning 机器学习的一个分支 机器学习分类 监督学习 特点:已知类别数据学习 因变量是否连续 分类 连续房价,体重,天气 回归 不连续是否患癌症 算法 k-近邻算法 KNN 决策树 支持向量机 SVM 神经网络 线性模…

设计模式小记

1、设计模式介绍 1.1、设计模式目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好的 代码重用性…

Spring封装的动态代理

看proxyFactory.addAdvice主要干了什么? 看下继承关系: 将advisor加入advisors 看下如何生成代理对象 org.springframework.aop.framework.DefaultAopProxyFactory#createAopProxy org.springframework.aop.framework.DefaultAopProxyFactory#hasNoUserSupplied…

2022国赛22:免密码ssh登录到其他Linux主机

大赛试题内容: 5.所有Linux主机root用户使用完全合格域名免密码ssh登录到其他Linux主机。 解答过程: 在linux-1上设置 [root@host-10-10-70-101 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): C…

.net C#反编译及脱壳常用工具--小结

1、Reflector --微软自家工具--推荐 Reflector是最为流行的.Net反编译工具。Reflector是由微软员工Lutz Roeder编写的免费程序。Reflector的出现使NET程序员眼前豁然开朗,因为这个免费工具可以将NET程序集中的中间语言反编译成C#或者Visual Basic代码。除了能将IL转…