#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
long long n;
array<vector<int>, maxn> e;
array<int, maxn> w, c, p, ans;
vector<long long> stk;
inline int read(){
int x;
cin>>x;
return x;
}
void dfs(const int u) {
stk.push_back(w.at(u)+stk.back());
int ret=0;
for(int l=0,r=stk.size()-1, mid=(l+r)>>1; l<=r; mid=(l+r)>>1)
if(stk.back()-stk.at(mid)<=c.at(u))
r=(ret=mid)-1;
else
l=mid+1;
ans.at(u)=stk.size()-ret-1;
for(auto v:e[u])
dfs(v);
stk.pop_back();
}
int main() {
cin>>n;
for(int i=2;i<=n;i++)
e.at(p.at(i)=read()).push_back(i);
generate_n(w.begin()+1,n,read);
generate_n(c.begin()+1,n,read);
stk.push_back(0);
dfs(1);
for(int i=1;i<=n;i++)
cout<<ans.at(i)<<" \n"[i==n];
return 0;
}
编译错误