提交时间:2020-11-16 09:42:38

运行 ID: 1814

#include<bits/stdc++.h> const int N=1e6+6; using namespace std; int n,v; int val[N]; int ans[N],path[N]; struct node{ int to,next; }e[N<<1]; int tmp,head[N]; void add(int x,int y){ e[++tmp].to=y; e[tmp].next=head[x]; head[x]=tmp; } int sum[N]; void sol(int x,int num){ int cnt=0; for(int i=num;i>=1;i--){ cnt=max(cnt,val[path[i]]); if(val[path[i]]>=cnt){ cnt=val[path[i]]; ans[x]++; } } } void f(int x,int fa,int num){ path[num]=x; sol(x,num); for(int i=head[x];i;i=e[i].next){ int v=e[i].to; if(v==fa) continue; f(v,x,num+1); } } int main(){ scanf("%d",&n); for(int i=2;i<=n;i++){ scanf("%d",&v); add(v,i); add(i,v); } for(int i=1;i<=n;i++) scanf("%d",&val[i]); f(1,0,1); for(int i=1;i<=n;i++) printf("%d ",ans[i]); return 0; }