/*
对于每一个u和他的儿子v
必定存在 $s[u]leq min{s[v]}$ ,否则不合法(因为a_igeq 0)
这样u和他所有儿子的点权和是
$$
sleft[ u
ight] +sum_{vin sonleft( u
ight)}{sleft[ v
ight] -sleft[ u
ight]}
\
=left( 1-cntleft( u
ight)
ight) *sleft[ u
ight] -sum_{vin sonleft( u
ight)}{s}left[ v
ight]
\
k=left( 1-cntleft( u
ight)
ight) le 0
$$
所以x(也就是s[u])越大,这个值越小,最大的合法的x就是min{s[v]}
所以我们把未知的s[i]设成inf,把父亲的s设成儿子的s中最小的那个,同时判断是否无解并统计答案,这个题就做完了
*/
#include <bits/stdc++.h>
using namespace std;
int64_t n,p[100005],s[100005],i,A;
#define R(a) for(i=a;i<=n;++i)
int main(){
cin>>n;
R(2)cin>>p[i];
R(1)cin>>s[i];
R(2)(~s[i])?s[p[i]]=min(s[i],s[p[i]]):s[i]=1e9+1;//保证1<=p[i]<i 这里相当于从上往下分层更新
R(1)if(s[i]<s[p[i]])return puts("-1"),0;else A+=s[i]>1e9?0:s[i]-s[p[i]];//>1e9的是深度为偶数的叶子
cout<<A;
}