题目描述
对于一棵多叉树,我们可以通过 “左孩子右兄弟” 表示法,将其转化成一棵
二叉树。
如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一。换句话说,每个结点可以选任意子结点作为左孩子,并按任意顺序连接右兄弟。
给定一棵包含 N 个结点的多叉树,结点从 1 至 N 编号,其中 1 号结点是根,每个结点的父结点的编号比自己的编号小。请你计算其通过 “左孩子右兄弟” 表示法转化成的二叉树,高度最高是多少。注:只有根结点这一个结点的树高度为 0 。
例如如下的多叉树:

可能有以下 3 种 (这里只列出 3 种,并不是全部) 不同的 “左孩子右兄弟”
表示:

其中最后一种高度最高,为 4。

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

输出
输出一个整数表示答案。

样例输入

5
1
1
1
2

样例输出

4

思路
一开始没有看懂这个题的意思,后来发现这个题应该是说把多叉树转化成2叉树的形式,多的兄弟节点就转化成子节点,然后求最高的高度。

第一想法就是把这颗树接成只有一个字节点的树,把其他的兄弟节点都连成子节点,那么对于这种方案,高度最高的子节点就应该连在最底下,使高度最大化,那么其他的子节点就只能贡献一层的高度了,所以我们使用dfs先求出每个节点的最大转化高度,然后以最高的子节点在最下,返回子节点数+最大子节点高度即可!

我们可以拿样例图的最后一个方案来解释,1号节点有3个子节点,其中2节点是最高的,那么把它放在最底下,所以3,4号子节点就只能本身可以充当一层高度,和它们的子节点无关,那么我们就可以返回1号子节点的个数3+最高的子节点高度2,又因为根节点的高度是0,所以减一得到正确答案

代码

#include "iostream"
#include "vector"
using namespace std;
const int N=100010;
vector<int> v[N];
int n,x;
int dfs(int u)
{if(v[u].size()==0) return 1;int res=0;for(int i=0;i<v[u].size();i++){res=max(res,dfs(v[u][i])); //获取最大子节点的高度}return v[u].size()+res; //这里最高的子节点会被加2次,但是没有加根节点的高度,所以两者抵消
}
int main()
{cin>>n;for(int i=2;i<=n;i++){cin>>x;v[x].push_back(i);}cout<<dfs(1)-1<<endl; //这里由于根节点没有高度,所以要减一了
}

第十二届蓝桥杯真题-左孩 子右兄弟(dfs)相关推荐

  1. 第十二届蓝桥杯真题砝码称重dp

    问题描述 你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1,W2,⋅⋅⋅,WN. 请你计算一共可以称出多少种不同的正整数重量? 注意砝码可以放在天平两边. 输入格式 输入的第一行包含一个整数 ...

  2. 蓝桥杯——历届真题左hai子右兄弟-python

    思路:dp,树转换为左孩子右兄弟的二叉树后,以i为根的树的最大深度为节点i的孩 子数量+孩子中子树最深的深度.使用li[i]记录结点i的所有子节点,dp公式即为:孩子数+max(子树深度),即 len ...

  3. 第十二届蓝桥杯D题 货物摆放

    第十二届蓝桥杯D题 货物摆放 题意[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 这里我们会发现他的方案数就是所有因数的组合数乘积等于n; #include<iostrea ...

  4. 第十届蓝桥杯c语言试题,第十届蓝桥杯真题编程题1-7解析(高级组).pdf

    scratch 少儿编程第十届蓝桥杯真题 7 大家好 ~今天我们来讲解 scratch 蓝桥杯第十届编程大题的第七道题. 同样,这道题也是非常有难度的一道题.一起来看一下吧 解析: 女孩的程序 1.在 ...

  5. 第十届蓝桥杯真题题解

    目录 一.组队(DFS) 二.年号字串(进制转换) 三.数列求值 四.数的分解 五.迷宫(BFS) 六.特别数的和(暴力) 七.完全二叉树的权值 一.组队(DFS) 题目描述 本题为填空题,只需要算出 ...

  6. 2019年第十届蓝桥杯真题python解答(更新中)

    1. 后缀表达式 首先要了解什么是后缀表达式: 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则). 由于后缀表达式 ...

  7. 外卖店优先级 第十届蓝桥杯真题 C++

    题目描述: 原题链接 饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0. 每经过 1 个时间单位,如果外卖店没有订单 ...

  8. 第十届蓝桥杯真题-灵能传输

    题目 OJ https://www.lanqiao.cn/problems/196/learning/ 考点 前缀和.贪心 思路 题目意思就是希望通过灵能交换后使得不稳定度最小,假设对a[i]进行灵能 ...

  9. 2019年第十届蓝桥杯真题解析 | 特殊数【Python】

    [特别数的和] 题目描述 小明对数位中含有 2.0.1.9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1.2.9.10 至 32.39 和 40,共 28 个,他们的和是 5 ...

  10. 第十二届蓝桥杯D题python解答

    由于要求解的是最短路径,所以我们采用迪杰斯特拉算法,按照改模板去套代码,首先初始化数据,最小公倍数利用乘积除以最大公因数计算求得 import math g=[[float('inf')]*2021 ...

最新文章

  1. 【Python】SyntaxError: unexpected EOF while parsing
  2. Python开发游戏的正确姿势,看这篇就够了
  3. ok6410 3.0.1内核调用V4L接口出错解决方法(转)
  4. 什么?Spring Boot CommandLineRunner 有坑!?
  5. 音视频即时通讯的介绍与前景
  6. Java内部类作用全解
  7. 本地预览图片html和js例子
  8. 2021年的Angular最佳实践
  9. JDBC学习笔记(查询SQL语句得到的结果对象)
  10. MySQL 联合索引测试2
  11. jqprint 分页打印_JS实现页面打印(整体、局部)
  12. Java 集合及底层源码分析,Java零基础入门pdf
  13. linux开源监控工具,十款开源免费监控软件
  14. new_picview_PicView图片浏览器
  15. matlab程序算天气,科学网-站点气温数据的积温计算(含Matlab程序实现)-朱永超的博文...
  16. s60v5全屏幕java_【转】 最新消息 ● S60v5官方华丽升级塞班^3系统java v2.1(亲测有效)...
  17. 【BLE】CC2541之动态广播加密数据
  18. php mysql弹幕_PHP开发弹幕系统
  19. 笑话集原创笑话精品展第二十四期
  20. \r\n,\n,\r简介

热门文章

  1. linux编写的员工管理系统,员工信息管理系统设计与实现(叶晖).doc
  2. 结构力学计算软件_自主研发|安世亚太通用仿真软件PeraSim提前剧透
  3. scrt上传下载文件
  4. 宏杉科技:存储创新之路需要决心与耐心
  5. IIC总线设计⑥——时钟模块DS1302
  6. java 解析dataset_C# DataSet用法的详细解析|C#教程
  7. 手机修改html离线网页内容,HTML5 离线应用之打造零请求、无流量网站的解决方法...
  8. 程序员英文简历范例(前端)
  9. vue3中json编辑器
  10. 在计算机桌面中选择了隐藏如何显示,怎么把隐藏电脑桌面游戏找到