提交时间:2024-03-31 11:26:18

运行 ID: 27848

#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int n,fa[N],v[N],ans[N],vis[N],ma; bool flag; void dfs(int root,int x,int maxx,int cnt){ return ; } signed main(){ scanf("%d",&n); flag=1; for(int i=2;i<=n;i++){ scanf("%d",&fa[i]); if(fa[i]!=i-1){ flag=0; } } for(int i=1;i<=n;i++){ scanf("%d",&v[i]); } if(flag){ for(int i=1;i<=(n/2);i++){ swap(v[i],v[n-i+1]); } for(int i=1;i<=n;i++){ if(v[i]>=ma){ ma=v[i]; ans[i-1]++; } } for(int i=1;i<=n;i++){ swap(ans[i],ans[n-i+1]); } for(int i=1;i<=n;i++){ ans[i]+=ans[i-1]; } }else{ for(int i=1;i<=n;i++){ dfs(i,i,v[i],0); } } for(int i=1;i<=n;i++){ printf("%d ",ans[i]); } return 0; }