AGC009题解

Posted hanyuweining

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AGC009题解相关的知识,希望对你有一定的参考价值。

为了1天4题的flag不倒所以开新坑...

 

B.

考虑把这棵树直接建出来,f[i]表示i最少的比赛次数,然后按照定义转移就行了。

技术图片
//Love and Freedom.
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
#define inf 20021225
#define N 100010
using namespace std;
int read()

    int s=0,f=1; char ch=getchar();
    while(ch<0||ch>9)if(ch==-) f=-1; ch=getchar();
    while(ch>=0&&ch<=9) s=s*10+ch-0,ch=getchar();
    return f*s;

struct edgeint to,lt;e[N];
int in[N],cnt,f[N],tmp[N];
void add(int x,int y)

    e[++cnt].to=y; e[cnt].lt=in[x]; in[x]=cnt;

void dfs(int x)

    if(!in[x])    return; int t=0;
    for(int i=in[x];i;i=e[i].lt)    dfs(e[i].to);
    for(int i=in[x];i;i=e[i].lt)    tmp[++t]=f[e[i].to];
    sort(tmp+1,tmp+t+1);
    for(int i=2;i<=t;i++)    if(tmp[i]<=tmp[i-1])
        tmp[i]=tmp[i-1]+1;
    f[x]=tmp[t]+1;// printf("%d %d\n",x,f[x]);

int main()

    int n=read(),x;
    for(int i=2;i<=n;i++) x=read(),add(x,i);
    dfs(1); printf("%d\n",f[1]);
    return 0;
View Code

 

以上是关于AGC009题解的主要内容,如果未能解决你的问题,请参考以下文章

AGC025简要题解

agc026 题解

AGC 043 C,D 题解

AGC 051 D C4 题解

AGC002 简要题解

AGC 053 C Random Card Game 题解