#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;
}