#include<iostream> #include<cstdio> #include<vector> ///nu uita sa comentezi freopen using namespace std; #define NMAX 100005 vector <int> v[NMAX]; long long n,r,T[NMAX],A[NMAX],B[NMAX],D[NMAX],V[NMAX],sir[NMAX]; void dfs(long long nod, long long niv) { long long i,fiu,s=0; sir[niv]=nod; for (i=1;i<niv;++i) if (A[nod]<=B[sir[i]]) ++V[sir[i+1]]; for (i=0;i<v[nod].size();++i) { fiu=v[nod][i]; dfs(fiu,niv+1); s+=V[fiu]; } for (i=0;i<v[nod].size();++i) { fiu=v[nod][i]; D[nod]+=V[fiu]*(s-V[fiu]); } if (A[nod]<=B[nod]) ++D[nod], D[nod]+=s*2; } int main() { long long i; // freopen("date.in","r",stdin); // freopen("date.out","w",stdout); cin>>n; for (i=2;i<=n;++i) { cin>>T[i]; v[T[i]].push_back(i); } for (i=1;i<=n;++i) cin>>A[i]; for (i=1;i<=n;++i) cin>>B[i]; dfs(1,1); for (i=1;i<=n;++i) cout<<D[i]<<"\n"; return 0; }