【agc009b】Tournament
Description
一场锦标赛有n个人,总共举办n-1次比赛,每次比赛必定一赢一输,输者不能再参赛。也就是整个锦标赛呈一个二叉树形式。已知一号选手是最后的胜者,以及对于i号选手(i>1)都知道他是被编号为ai的选手击败的。求这棵二叉树的最小可能深度。
Solution
若一场比赛为一个树上的节点,可以发现,同一位选手的比赛必为一条链(深度递增)。
记录每位选手i击败的选手个数为sum,编号a[i][j](0<j≤sum),记以该选手i最后一场比赛(即离根节点最近的点)为根的子树的最小深度为dis[i]。
当sum=0时,$dis[i]=0$;
当sum>0时,将a[i][1]到a[i][sum]按dis值从大到小排,$dis[i]=\sum\limits_{j=1}^{sum}{min\{i+dis[a[i][j]]\}}$;
dfs一次即可,dis[1]即为答案。
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define next _next
struct edge{
int to,next;
}e[];
int n,f[]={},a[],head[];
bool cmp(int a,int b){
return a>b;
}
void dfs(int u){
int sum=,minn=;
for(int i=head[u];~i;i=e[i].next)
dfs(e[i].to);
for(int i=head[u];~i;i=e[i].next)
a[++sum]=f[e[i].to];
if(sum==)
return;
sort(a+,a+sum+,cmp);
for(int i=;i<=sum;i++)
minn=max(minn,i+a[i]);
f[u]=minn;
return;
}
int main(){
memset(head,-,sizeof(head));
scanf("%d",&n);
for(int i=,x;i<=n;i++){
scanf("%d",&x);
e[i]=(edge){i,head[x]};
head[x]=i;
}
dfs();
printf("%d\n",f[]);
return ;
}
【agc009b】Tournament的更多相关文章
- 【CF878C】Tournament set+并查集+链表
[CF878C]Tournament 题意:有k个项目,n个运动员,第i个运动员的第j个项目的能力值为aij.一场比赛可以通过如下方式进行: 每次选出2个人和一个项目,该项目能力值高者获胜,败者被淘汰 ...
- 【数据结构】Tournament Chart
Tournament Chart 题目描述 In 21XX, an annual programming contest, Japan Algorithmist GrandPrix (JAG) has ...
- 【ZOJ4063】Tournament(构造)
题意:n个人要打m轮比赛 每一轮每个人都要有一个对手.而且每个对手只能打一次.假设a与b打了,c与d打了, 那么后面的任意一轮如果a与c打了,那么b就必须和d打 问是否存在方案,输出字典序最小的一组, ...
- 【CF913F】Strongly Connected Tournament 概率神题
[CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...
- 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP
[题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...
- 【BZOJ3943】[Usaco2015 Feb]SuperBull 最小生成树
[BZOJ3943][Usaco2015 Feb]SuperBull Description Bessie and her friends are playing hoofball in the an ...
- 【POJ2699】The Maximum Number of Strong Kings(网络流)
Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...
- 【BZOJ3943】[Usaco2015 Feb]SuperBull 最大生成树
[BZOJ3943][Usaco2015 Feb]SuperBull Description Bessie and her friends are playing hoofball in the an ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
随机推荐
- [Poi] Build a Vue App with Poi
Poi uses the Vue babel presets by default, so there is no additional install required to get up-and- ...
- [Python] ndArray of numpy
NumPy Reference: Mathematical functions numpy.sum: Sum of elements - along rows, columns or all nump ...
- 设计模式之九:建造者模式(Builder)
建造者模式: 将一个复杂对象的建造过程和它的表示分离开来,这样同样的建造过程能够创建不同的表示. Separate the construction of a complex object from ...
- OpenCV学习笔记09--通过cvPtr2D或指针算法绘制图形
练习:创建一个1000*1000的三通道图像,将其元素所有置0.以(200,50)和(400,200)为顶点绘制一个绿色平面 我们能够用两种方法来实现这一功能,一个是使用cvPtr2D,可是因为使用了 ...
- impala 概述
impala 概述 什么是Impala? Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎. 它是一个用C ++和Java编写的开源软件. 与其他Had ...
- C# 从磁盘中读取文件
读取txt文件 ------读取的数据比较小的时候: 如果你要读取的文件内容不是很多,可以使用 File.ReadAllText(filePath) 或指定编码方式 File.ReadAllText( ...
- 创建一个基于ViSP的图片显示程序
创建一个图片读取,并在windows下窗口显示的程序. #include <visp/vpDisplayD3D.h> #include <visp/vpDisplayGDI.h> ...
- Vue总结(一)
vue总结 构建用户界面的渐进式框架 渐进式:用到什么功能即可使用转么的框架子模块. 两个核心点 向应的数据绑定 当时图发生改变->自动跟新视图,利用Object.defindProperty中 ...
- 关于echarts3版本里的tree图形显示Bug、无法缩放和移动
在使用echarts3版本的js绘制tree图表的时候,如果想动态更新tree的数据,可能会出现图表渲染有异常,并且api给出的roam配置无法控制图表通过鼠标缩放和移动,如下图: 不过更改echar ...
- RvmTranslator6.1 - Attribute List
RvmTranslator6.1 - Attribute List eryar@163.com 1. Introduction RvmTranslator can translate the RVM ...