码迷,mamicode.com
首页 > 其他好文 > 详细

AGC009题解

时间:2019-09-24 17:36:36      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:show   lap   free   mat   splay   bsp   dfs   color   img   

为了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 edge{int 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题解

标签:show   lap   free   mat   splay   bsp   dfs   color   img   

原文地址:https://www.cnblogs.com/hanyuweining/p/11579302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!