传送门

把aia_iai​看成faifa_ifai​,建出一棵多叉树,再把多叉树转成二叉树,转出来的每棵二叉树对应着一种比赛方式。

以n=8,a2,...,8=1,1,2,4,3,3,3n=8,a_{2,...,8}=1,1,2,4,3,3,3n=8,a2,...,8​=1,1,2,4,3,3,3为例,

多叉树转出的二叉树深度=赛程二叉树的深度

考虑求多叉树转二叉树后的最小可能深度:
假设uuu的所有儿子vvv的子树都已经转化好了:

现在要把uuu的子树转成二叉树:

设dep[x]dep[x]dep[x]表示以xxx为根的子树转成二叉树后的最小可能深度。
要求dep[u]dep[u]dep[u],我们要找到一种排列uuu的所有儿子vvv的方式,使得max{dep[v1]+1,dep[v2]=2,...,dep[vk]+k}max\{dep[v_1]+1,dep[v_2]=2,...,dep[v_k]+k\}max{dep[v1​]+1,dep[v2​]=2,...,dep[vk​]+k}最小。
显然把儿子按depdepdep从大到小排序即可。

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int N=1e5+10;
vector<int> g[N];
int n,fa[N],mxd[N];
bool cmp(int a,int b){return mxd[a]>mxd[b];
}
void dfs(int u){int tot=g[u].size();for(int i=0;i<tot;i++) dfs(g[u][i]);sort(g[u].begin(),g[u].end(),cmp);if(tot){for(int i=0;i<tot;i++){int v=g[u][i];mxd[u]=max(mxd[u],mxd[v]+i+1);}}
}
int main(){scanf("%d",&n);for(int i=2;i<=n;i++){scanf("%d",&fa[i]);g[fa[i]].push_back(i);}dfs(1);printf("%d\n",mxd[1]);return 0;
}

[AGC009B] Tournament(多叉树转二叉树后的最小可能深度)相关推荐

  1. 后序遍历的非递归算法python_二叉树后序遍历(递归与非递归)算法C语言实现...

    二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素. 图 1 二叉树 如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 ...

  2. 树形dp技巧,多叉树转二叉树

    今天复习树形dp时发现一道比较古老的题,叫选课,是树形dp的一道基础题,也是多叉树转二叉树应用的模版题 多叉树转二叉树的应用非常广泛,因为如果一个节点的儿子太多,一个一个存下来不方便去查询,并且会增加 ...

  3. (数据结构)二叉树后序遍历

    二叉树后序遍历 二叉树后序遍历的实现思想是: 访问当前节点的左子树 访问当前节点的右子树 访问根节点 图 1 二叉树 以上图 1 为例,后序遍历的过程如下: 从根节点 1 开始,遍历该节点的左子树(以 ...

  4. sdut 2137 数据结构实验之求二叉树后序遍历和层次遍历

    数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descr ...

  5. 数据结构实验之求二叉树后序遍历和层次遍历

    数据结构实验之求二叉树后序遍历和层次遍历 Description 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历. Input 输入数据有多组,第一行是一个整数t (t<100 ...

  6. c++ stack 遍历_五分钟C语言数据结构 之 二叉树后序遍历(非递归很重要)

    五分钟C语言实现常见数据结构 今天的内容分享的是二叉树后序遍历 DP问题,欢迎关注 动态规划一篇就够了 全网最详细, 逐步理解, 万字总结 - Johngo的文章 - 知乎 https://zhuan ...

  7. 数据结构之 二叉树---求二叉树后序遍历和层次遍历(先建树,再遍历)

    数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入 ...

  8. 验证二叉树后序遍历序列是否符合要求

    验证二叉树后序遍历序列是否符合要求 @(算法学习) 给定一个后续遍历序列,立马知道树根是最后一个序列,那么如何切分左右子树呢? 比树根小的数都在左子树,比根大的都在右子树. 再递归验证,即,对左右子树 ...

  9. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

最新文章

  1. matlab中线性变压器,用MATLAB优化计算差动变压器的线性范围
  2. Maven——Maven概述
  3. 0ctf2017-babyheap调试记录fastbin-attack
  4. 【java】ssh the connection is not authenticated
  5. python特性 property_python特性property
  6. Android开机动画的基本流程
  7. 网上关于豆瓣的思考搜集
  8. 制作uefi的kali安装盘_制作 UD + EFI + PE + KALI 启动U盘
  9. Markdown必备,Lsky-pro图床配置
  10. Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户、项目、聚类、混合的协同过滤推荐算法WebShopRSMEx 源代码下载
  11. 编程实践--决策树分类算法--隐形眼镜材质分类
  12. Git Clone时报错解决方法
  13. 温柔末世,慢慢到来的末日
  14. php detailview,PHP开发框架Yii Framework教程(31) Zii组件-DetailView示例
  15. Nim 博弈游戏详解
  16. [精选]万能节日国庆头像小程序(可引流,开通流量主,带pc后台管理)
  17. Android Audio - 支持多个APK同时录音
  18. 小米 11 ultra旗舰版官方原版ROM系统MIUI12.5所有固件
  19. Linux 2.6 劫持系统调用 隐藏进程
  20. 朋友合作怎么迈过利益这道坎

热门文章

  1. python list remove 删除引用_Python——list列表操作一坑(remove)
  2. java io操作_Java 的IO操作(文件的读,写操作)
  3. 二分法查找是基于有序_201,查找顺序查找
  4. python调用libvirt_通过python获取kvm虚拟机的监控信息(基于libvirt API)
  5. leetcode 515. 在每个树行中找最大值(层序遍历06)
  6. 一文了解贪心算法和回溯算法在前端中的应用
  7. [PAT乙级]1031 查验身份证
  8. 蓝桥杯2015决赛-方格填数-枚举 or dfs
  9. 深圳本次核酸检普筛怎么将个人信息和结果对应上??
  10. python分布式存储文件_python如何分布式存储文件的方法