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;
以上是关于AGC009题解的主要内容,如果未能解决你的问题,请参考以下文章