2020-11-14牛客小白月赛29-D
种树
https://ac.nowcoder.com/acm/contest/8564/D
2020-11-14牛客小白月赛29-D
[by_041]
- 看题,分析,大剪刀就是用来搬运大数的,多大呢?在
(0m+1)/2
层内最大的 - 那么答案就很明显了,
(m+1)/2
内的深度返回大值,其余返回小值 - 附上代码
#include<iostream> using namespace std; void swp(int&a,int&b) {a^=b;b^=a;a^=b;return;} int maxx(int a,int b) {return a>b?a:b;} int minn(int a,int b) {return a<b?a:b;} int input() {char ch=getchar(); while(ch<'0'||ch>'9') ch=getchar(); int a=ch-'0'; while((ch=getchar())>='0'&&ch<='9') a=(a<<3)+(a<<1)+ch-'0'; return a; } void output(int a) { if(a>9) output(a/10); putchar(a%10+'0'); return; } struct node_ { int l,r,val; }d[1000001]; int n,m,anss; int goo(int f=1,int layer=1) { if(!d[f].l)return d[f].val; if(layer<=m) return maxx(goo(d[f].l,layer+1),goo(d[f].r,layer+1)); return minn(goo(d[f].l,layer+1),goo(d[f].r,layer+1)); } int main() { n=input(); for(int i=1;i<=n;i++) d[i].l=input(),d[i].r=input(),m+=(bool)d[i].l; m=(m+1)/2; for(int i=1;i<=n;i++) d[i].val=input(); anss=goo(); output(anss); return 0; }