#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
vector<long long> v1[1000005 + 1];
bool vis[1000005 + 1];
long long cnt = 0, f1 = 0;
long long lev[1000005 + 1], sub[1000005 + 1], sum[1000005 + 1], a[1000005 + 1];
void dfs(long long s) {
  vis[s] = true;
  sub[s] = 1;
  long long i, k;
  for (i = 0; i < v1[s].size(); i++) {
    long long k = v1[s][i];
    if (vis[k] == 0) {
      lev[k] = lev[s] + 1;
      dfs(k);
      sub[s] += sub[k];
    }
  }
}
void dfs1(long long s, long long par) {
  vis[s] = true;
  long long i, k, mn = INT_MAX;
  if (sum[s] == -1) {
    long long f2 = 0;
    for (int i = 0; i < v1[s].size(); i++) {
      k = v1[s][i];
      if (vis[k] == 0) {
        f2 = 1;
        mn = min(mn, sum[k]);
      }
    }
    if (sum[par] > mn) {
      f1 = 1;
    } else {
      if (f2 == 1) {
        a[s] = mn - sum[par];
        sum[s] = sum[par] + a[s];
      } else {
        a[s] = 0;
      }
    }
  } else if (s != 1) {
    a[s] = sum[s] - sum[par];
  }
  for (i = 0; i < v1[s].size(); i++) {
    k = v1[s][i];
    if (vis[k] == 0) {
      dfs1(k, s);
    }
  }
}
int main() {
  memset(lev, 0, sizeof(lev));
  memset(sub, 0, sizeof(sub));
  memset(a, 0, sizeof(a));
  long long n, k, i;
  scanf("%lld", &n);
  ;
  for (int i = 2; i < n + 1; i++) {
    long long x;
    scanf("%lld", &x);
    ;
    v1[x].push_back(i);
    ;
    v1[i].push_back(x);
    ;
  }
  for (int i = 1; i < n + 1; i++) {
    scanf("%lld", &sum[i]);
    ;
  }
  a[1] = sum[1];
  dfs(1);
  memset(vis, false, sizeof(vis));
  dfs1(1, -1);
  long long sum = 0;
  for (int i = 1; i < n + 1; i++) {
    sum += a[i];
  }
  if (f1 == 0)
    cout << sum << "\n";
  else
    cout << "-1"
         << "\n";
  return 0;
}
