#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
int n,p[800],d,a,b,c,maxc;
bool used[800];
vector<P> e[800];
 
void dfs(int x,int sum){
  used[x]=true;
  for(int i=0;i<e[x].size();i++){
    int nx=e[x][i].first;
    if(used[nx])continue;
    if(e[nx].size()==1){
      maxc=max(maxc,sum);
      continue;
    }
    dfs(nx,sum+e[x][i].second);
  }
  return;
}
 
int main(){
  while(cin>>n&&n){
    a=b=c=0;
    for(int i=1;i<n;i++)cin>>p[i];
    for(int i=1;i<n;i++){
      cin>>d;
      a+=d;
      e[i].push_back(P(p[i]-1,d));
      e[p[i]-1].push_back(P(i,d));
    }
    for(int i=0;i<n;i++)
      if(e[i].size()==1)b+=e[i][0].second;
    for(int i=0;i<n;i++)
      if(e[i].size()!=1){
	memset(used,0,sizeof(used));
	maxc=0;
	dfs(i,0);
	c=max(c,maxc);
      }
    cout<<3*a-2*b-c<<endl;
    for(int i=0;i<n;i++)e[i].clear();
  }
  return 0;
}