提交时间:2020-11-16 10:11:47
运行 ID: 1819
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10; int n; int fa[N],v[N]; int ans[N]; bool vis[N]; int dfs(int p) { vis[p]=true; for(int i=p;i;i=fa[i]) { if(v[i]==v[p]) ans[p]++; if(v[i]>v[p]) { if(!vis[i]) dfs(i); ans[p]+=ans[i]; break; } } return ans[p]; } signed main() { scanf("%lld",&n); for(int i=2;i<=n;i++) scanf("%lld",&fa[i]); for(int i=1;i<=n;i++) scanf("%lld",&v[i]); for(int i=1;i<=n;i++) { if(!vis[i]) dfs(i); printf("%lld ",ans[i]); } return 0; }