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的更多相关文章

  1. 【CF878C】Tournament set+并查集+链表

    [CF878C]Tournament 题意:有k个项目,n个运动员,第i个运动员的第j个项目的能力值为aij.一场比赛可以通过如下方式进行: 每次选出2个人和一个项目,该项目能力值高者获胜,败者被淘汰 ...

  2. 【数据结构】Tournament Chart

    Tournament Chart 题目描述 In 21XX, an annual programming contest, Japan Algorithmist GrandPrix (JAG) has ...

  3. 【ZOJ4063】Tournament(构造)

    题意:n个人要打m轮比赛 每一轮每个人都要有一个对手.而且每个对手只能打一次.假设a与b打了,c与d打了, 那么后面的任意一轮如果a与c打了,那么b就必须和d打 问是否存在方案,输出字典序最小的一组, ...

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

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

  5. 【CodeForces】913 F. Strongly Connected Tournament 概率和期望DP

    [题目]F. Strongly Connected Tournament [题意]给定n个点(游戏者),每轮游戏进行下列操作: 1.每对游戏者i和j(i<j)进行一场游戏,有p的概率i赢j(反之 ...

  6. 【BZOJ3943】[Usaco2015 Feb]SuperBull 最小生成树

    [BZOJ3943][Usaco2015 Feb]SuperBull Description Bessie and her friends are playing hoofball in the an ...

  7. 【POJ2699】The Maximum Number of Strong Kings(网络流)

    Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...

  8. 【BZOJ3943】[Usaco2015 Feb]SuperBull 最大生成树

    [BZOJ3943][Usaco2015 Feb]SuperBull Description Bessie and her friends are playing hoofball in the an ...

  9. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

随机推荐

  1. iOS开发 - 数据归档与恢复 NSKeyedArchiver

    归档与恢复归档 归档,英文Archiver['ɑrkɪvə],这里指的是将OC的对象存储为一个文件或者网络上的一个数据块. 恢复归档.英文UnArchiver,指的是将一个来自文件或网络的归档数据块恢 ...

  2. vue2.0-transition多个元素

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. HMACSHA256 Class

    https://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha256(v=vs.110).aspx Comp ...

  4. 360动态加载的Android插件框架

    github地址:https://github.com/Qihoo360/DroidPlugin DroidPlugin 是360手机助手在Android系统上实现了一种新的插件机制:它可以在无需安装 ...

  5. AIX 压缩与归档

    .tar.Z 格式 压缩:  compress filename.tar 解压:  zcat filename.tar.Z           tar -xvf -   .tar.gz 格式 压缩:t ...

  6. SQLServer 查询最近一天,三天,一周,一月,一季度数据的方法

    三天 select * from T_news where datediff(day,addtime,getdate())<= 2 and datediff(day,addtime,getdat ...

  7. 用efibootmgr管理UEFI启动项,添加丢失的启动项

    UEFI用来替代传统BIOS引导操作系统,学会修改UEFI启动项也变得十分重要,UEFI全称为:“统一的可扩展固件接口”(Unified Extensible Firmware Interface), ...

  8. Perl线程介绍

    Perl 中的线程 本文首先概述了线程的概念和意义,接着回顾了 Perl 语言中对线程支持的演化历史,然后通过一系列示例重点介绍了 Perl 中线程的实现,数据的共享以及线程间的同步,最后归纳并总结了 ...

  9. Metro界面的真正意义

    昨天去客户那给安装防火墙和交换机,因为客户和我们公司签订了维保的合同,然后我们公司两个人去了客户那跟客户沟通也去顺路去做巡检. 客户之前跟我们公司采购了一台DELL的PC服务器,预装了win serv ...

  10. strings---对象文件或二进制文件中查找可打印的字符串

    strings命令在对象文件或二进制文件中查找可打印的字符串.字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束. strings命令对识别随机对象文件很有用. 语法 strings [ - ...