#include<bits/stdc++.h>
using namespace std;
using Int = long long;
template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}


template<typename T>
struct DiameterForEdge{
  using Edge = pair<int, T>;
  vector<T> dp;
  vector<vector<Edge> > G;
  DiameterForEdge(int n):dp(n),G(n){}
  void add_edge(int u,int v,T c){
    G[u].emplace_back(v,c);
    G[v].emplace_back(u,c);
  }
  void dfs(int v,int p,int &s){
    if(p<0) dp[v]=T(0);
    if(dp[s]<dp[v]) s=v;
    for(Edge e:G[v]){
      int u=e.first;
      if(u==p) continue;
      dp[u]=dp[v]+e.second;
      dfs(u,v,s);
    }
  }
  pair<int, int> endPoints(){
    int s=0;
    dfs(s,-1,s);
    int t=s;
    dfs(t,-1,t);
    return make_pair(s,t);
  }
  T build(){
    int t=endPoints().second;
    return dp[t];
  }
  vector<T> distance(int v){
    dfs(v,-1,v);
    return dp;
  }
  vector<T> farthest(){
    int t=endPoints().second;
    auto ds=dp;
    auto dt=distance(t);
    for(int i=0;i<(int)ds.size();i++)
      if(ds[i]<dt[i]) ds[i]=dt[i];
    return ds;
  }
};


template<typename V>
V compress(V v){
  sort(v.begin(),v.end());
  v.erase(unique(v.begin(),v.end()),v.end());
  return v;
}
template<typename T>
map<T, int> dict(const vector<T> &v){
  map<T, int> res;
  for(int i=0;i<(int)v.size();i++)
    res[v[i]]=i;
  return res;
}
map<char, int> dict(const string &v){
  return dict(vector<char>(v.begin(),v.end()));
}

//INSERT ABOVE HERE
signed main(){
  int n;
  while(cin>>n,n){
    vector<int> ps(n),ds(n);
    for(int i=1;i<n;i++) cin>>ps[i],ps[i]--;
    for(int i=1;i<n;i++) cin>>ds[i];

    vector<int> deg(n,0);
    for(int i=1;i<n;i++) deg[i]++,deg[ps[i]]++;

    vector<int> vs;
    for(int i=0;i<n;i++)
      if(deg[i]>1) vs.emplace_back(i);
    auto dc=dict(vs);

    int sum=0;
    DiameterForEdge<int> H(vs.size());
    for(int i=1;i<n;i++){
      sum+=ds[i];
      int u=ps[i],v=i;
      if(!dc.count(u)) continue;
      if(!dc.count(v)) continue;

      H.add_edge(dc[u],dc[v],ds[i]);
      sum+=ds[i]*2;
    }

    cout<<sum-H.build()<<endl;
  }
  return 0;
}

