提交时间:2020-11-16 09:19:41

运行 ID: 1809

#include<bits/stdc++.h> #define LL long long using namespace std; int n; struct node{ int to; int next; }edge[1000005]; int head[1000005]; int cnt; void add(int u,int v){ edge[++cnt].to=v; edge[cnt].next=head[u]; head[u]=cnt; return ; } LL val[1000005]; LL Max[1000005]; int sum; LL getmax(LL a,LL b){ if(a>=b) return a; return b; } int ans; int main(){ cin>>n; int id; for(int i=2;i<=n;i++){ scanf("%d",&id); add(id,i); if(id==i-1) sum++; } for(int i=1;i<=n;i++){ scanf("%lld",&val[i]); } if(sum==n-1){ for(int i=1;i<=n;i++){ memset(Max,0,sizeof(Max)); ans=0; Max[i]=val[i]; for(int j=i-1;j>=1;j--){ Max[j]=getmax(Max[j+1],val[j]); } for(int j=1;j<=i;j++){ if(val[j]==Max[j]) ans++; else continue; } cout<<ans<<" "; } cout<<endl; return 0; } return 0; }