题目:AT2291(日文题面233)

解法:树形dp+贪心

构建一棵树。对于每个选手 x x x ,若其被 y" role="presentation" style="position: relative;">yyy 选手打败,则在树中连边 (y,x) ( y , x ) (y,x) 。那么题目转化为将原多叉树转为二叉树(将一个点的兄弟变为其右儿子),要使二叉树的树高最小。
这。。贪心啊。。
设 fi f i f_i 表示转为二叉树后以 i i i 为根的子树树高的最小值,那么有递推:

fi=maxv∈Sifv+j+1" role="presentation">fi=maxv∈Sifv+j+1fi=maxv∈Sifv+j+1

f_i=\max_{v\in S_i}{f_v+j+1}

其中 j j j 表示 v" role="presentation" style="position: relative;">vvv 为 i i i 的第 j" role="presentation" style="position: relative;">jjj 个儿子(从 0 0 0 开始)
那么现在就是要安排每个儿子的顺序使得 f1" role="presentation" style="position: relative;">f1f1f_1 最小。排序即可。

代码

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>using namespace std;vector<int> point[100001];
int n,fa,maxd[100001],ans;bool cmp(int u,int v){return maxd[u]>maxd[v];}void dfs(int u){if(!point[u].size())maxd[u]=1;for(int v:point[u])dfs(v);sort(point[u].begin(),point[u].end(),cmp);for(int i=0;i<point[u].size();++i)maxd[u]=max(maxd[point[u][i]]+i+1,maxd[u]);
}int main(){scanf("%d",&n);for(int i=2;i<=n;++i)scanf("%d",&fa),point[fa].push_back(i);dfs(1);printf("%d",maxd[1]-1);
}

【AT2291】Tournament相关推荐

  1. 【CF913F】Strongly Connected Tournament 概率神题

    [CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...

  2. 【CodeForces 1260E --- Tournament】

    [CodeForces 1260E --- Tournament] Description You are organizing a boxing tournament, where n boxers ...

  3. 【算法】超详细的遗传算法(Genetic Algorithm)解析

    转自:https://www.jianshu.com/p/ae5157c26af9 [算法]超详细的遗传算法(Genetic Algorithm)解析 00 目录 遗传算法定义 生物学术语 问题导入 ...

  4. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  5. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  6. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  7. 【C#】类——里式转换

    类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...

  8. 【C#】Out与ref是干什么的?

    关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...

  9. 【软件工程】RUP与软件开发5大模型

    软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...

最新文章

  1. vs2010打不开vs2017的.sln文件,出现错误提示 “选择的文件是解决方案文件 但是用此应用程序的较新版本创建的,无法打开”
  2. 如何仅从git存储库中稀疏签出单个文件?
  3. OpenGL高斯模糊
  4. linux安装autossh详细教程,在Linux下安装autossh的教程
  5. java如何做数据归档_oracle数据库的归档方式
  6. vue中过滤器比较两个数组取相同值
  7. 排版人员 快速排版_选择排版前应了解的事项
  8. Sql Server之旅——终点站 nolock引发的三级事件的一些思考
  9. 用户身份验证最佳做法清单
  10. 【2018.10.2】Note of CXM
  11. android studio使用ndk,jni随记
  12. 三菱PLC编程指令简介
  13. 50.纯 CSS 创作一个永动的牛顿摆
  14. python与SQL学习比较
  15. 各版本的Hadoop安装包下载
  16. 安卓应用程序开发培训!整理几个重要的Android知识,醍醐灌顶!
  17. cobaltstrike安装使用
  18. CFD解决一维标量问题(迎风、Lax-Wendroff、TVD、WENO5+3阶Runge-Kutta)
  19. avue中地图使用实现地图的联动_7.1地图组件
  20. git 快速清理本地分支_Git删除本地多个分支

热门文章

  1. html更改纵坐标数值,excel折线图纵坐标轴数值与实际值不一致该怎么办?折线图怎么修改纵坐标...
  2. 【ML30】Basic K-means clustering algorithm
  3. 利用PyTorch自定义数据集实现猫狗分类
  4. STM32F103代码远程升级(三)基于YModem协议串口升级程序的实现
  5. 【转】30 岁前实现财务自由的人,都做对了哪些事?
  6. 【技巧】去掉RedisDesktopManager更新提示弹窗
  7. 53、Gif 控件GifView 的使用,播放gif图片
  8. Ubuntu 22.04 安装R语言及R studio
  9. 利用现代技术研发的人工智能
  10. 在VMware16虚拟机中安装Windows10操作系统详细过程!!必看