#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fr(i,j,k) for(int i=j;i<k;i++)
#define f(n) fr(i,0,n)
#define f1(n) fr(i,1,n+1)
#define pb push_back
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
const int maxn = 200007;
int P[maxn],V[maxn],d[maxn],C[2][maxn];
struct cmp {
    bool operator() (const int &a,const int &b) {
        if(1LL * C[0][a] * C[1][b] != 1LL * C[0][b] * C[1][a])
            return 1LL * C[0][a] * C[1][b] > 1LL * C[0][b] * C[1][a];
        else return a > b;
    }
};
set<int,cmp>st;
int fi(int x) {
    return d[x] == x ? x : d[x] = fi(d[x]);
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    for (int i = 2 ; i <= n ; i++) {
        cin >> P[i];
    }
    f1 (n) {
        cin >> V[i];
    }
    f1 (n) {
        d[i] = i;
        C[V[i]][i] = 1;
    }
    ll ans = 0;
    for (int i = 2 ; i <= n ; i++) {
        st.insert(i);
    }
    for (int i = 1 ; i <= n - 1 ; i++) {
        int v = *st.begin();
        int p = fi(P[v]);
        st.erase(v);
        st.erase(p);
        ans += 1LL * C[0][v] * C[1][p];
        C[1][p] += C[1][v];
        C[0][p] += C[0][v];
        d[v] = p;
        if (p != 1) {
            st.insert(p);
        }
    }
    cout << ans << '\n';
}  