详见屎山
#include<bits/stdc++.h>
#define int long long
/*
不要以为你有后台你就可以乱看人代码,不要以为你有后台就乱来看别人。你没有代码!!!你,就是后台享有最高权力,你认为我是骂你的,你就抄吧,你甚至可以封我的号。但是,群众的眼睛是雪亮的!!!!
如果你看了我的代码,会让全天下的oiers知道,你的腐朽!!!
你将会臭名昭著!!!
*/
using namespace std;
void read(int &x){
x=0;bool f=0;char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-')f=1;
ch=getchar();
}do{x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}while(ch>='0'&&ch<='9');
x=f?-x:x;
}
int n,a[100001],d[100001],w[100001],c[100001],s[100001],l;
vector<int>v[100001];
bool ck(int x){
return d[s[l]]-d[s[x-1]]<=c[l];
}
int ef(int l,int r){
while(l<r){
int mid=l+r>>1;
if(ck(mid))r=mid;
else l=mid+1;
}return l;
}
void dfs(int x){
a[x]=l-ef(1,l)+1;
for(auto i:v[x]){
s[++l]=i,d[i]=d[x]+w[i];
dfs(i);
}l--;
return;
}
signed main(){
read(n);
for(int i=2;i<=n;i++)read(l),v[l].push_back(i);
for(int i=1;i<=n;i++)read(w[i]);
for(int i=1;i<=n;i++)read(c[i]);
s[1]=l=1,d[1]=w[1],dfs(1);
for(int i=1;i<=n;i++)cout<<a[i]<<' ';
return 0;
}