#include <stdio.h>
#include <stdlib.h>
int cnt[805]={};
int node[805][805]={};
int d[805][805]={};
int tmp[805]={};
int ok[805]={};
int min(int a,int b){
    return (a<b?a:b);
}
int max(int a,int b){
    return (a>b?a:b);
}
int dfs(int cur,int par){
    int i=0,res=0;
    for(i=0;i<cnt[cur];i++){
       int  v=node[cur][i];
       //printf("%d\n",v);
        if(par==v)continue;
        res=max(res,dfs(v,cur)+d[cur][v]);
    }
    return res;
}
int main(void){
    int n,i,j;
    while(1){
        scanf("%d",&n);
        if(n==0)return 0;
        for(i=0;i<805;i++){
            cnt[i]=0;
            ok[i]=1;
        }
        for(i=0;i<805;i++)for(j=0;j<805;j++)node[i][j]=-1;
        int b,sum=0;
        for(i=1;i<n;i++){
            scanf("%d",&b);
            b--;
            tmp[i]=b;
            node[i][cnt[i]++]=b;
            node[b][cnt[b]++]=i;
        }
        for(i=1;i<n;i++){
            scanf("%d",&d[i][tmp[i]]);
            d[tmp[i]][i]=d[i][tmp[i]];
            sum+=d[i][tmp[i]];
        }
         if(n==3){
             printf("%d\n",sum);
             continue;
        }
        int dist=0,j;
        int cp[n];
        for(i=0;i<n;i++)cp[i]=cnt[i];
        for(i=0;i<n;i++){
            if(cp[i]==1){
                dist+=d[i][node[i][0]];
                sum-=d[i][node[i][0]];
                cnt[i]=0;
                int v=node[i][0];
                for(j=0;j<cnt[v];j++){
                    if(i==node[v][j]){
                        node[v][j]=-1;
                        while(node[v][j+1]!=-1){
                            node[v][j]=node[v][j+1];
                            node[v][j+1]=-1;
                            j++;
                        }
                        break;
                    }
                }
                 cnt[v]--;
            }
        }
        int ans=(int)(1e9);
        int ok=1;
        for(i=0;i<n;i++){
            if(cnt[i]==1){
                //直径を求める
                int max_dist=dfs(i,-1);
                ans=min(ans,(sum-max_dist)*3+max_dist*2);
                ok=0;
            }
        }
        if(ok)ans=0;
       printf("%d\n",ans+dist);
    }
}
