#include <stdio.h>
#include <stdlib.h>

#define MAX_N 810

int cost[MAX_N][MAX_N];
int bridge[MAX_N];
int p[MAX_N], d[MAX_N];
int N;
int remind[1000];
int res1 = 0, res2 = 0, rmax = 0;

int max(int a, int b){
    if(a > b) return a;
    else return b;
}

int dfs(int is,int pre){
    int res1=0,i,j,a=1,res2=0;
    for(i=0;i<N;i++){
        if(i == is || i == pre) continue;
        if(cost[is][i]>0){
            remind[a]=remind[a-1]+cost[is][i]+dfs(i,is);
            a++;
        }
    }
    if(a>0){
        for(j=0;j<a;j++){
            res1=max(res1,remind[j]);
        }
    }
    
    return res1;
}

int main(void){
    int i, j;
    remind[0]=0;
    while(1){
        int maxi=0;
        scanf("%d", &N);
        if(N == 0) break;
        res1 = 0 ; res2 = 0;
        for(i = 0; i < N; i++)for(j = 0; j < N; j++) cost[i][j] = 0;
        for(i = 0; i < N; i++)bridge[i] = 0;
        for(i = 1; i < N; i++){ scanf("%d", &p[i]); p[i]--; }
        for(i = 1; i < N; i++) scanf("%d", &d[i]);
        for(i = 1; i < N; i++){
            //???????????¶???????????????????????¶???????????¨????????????????????????????????????
            cost[i][p[i]] = d[i];
            cost[p[i]][i] = d[i];
            //???????????¶????????????????????°
            bridge[p[i]]++;
            bridge[i]++;
        }
        //????????£????????????????????¬????????°???????????¶??????????????????????????????????????¶??????????????§?????????
        for(i = 0; i < N; i++){
            if(bridge[i] == 1){
                for(j = 0;j < N;j++){
                    if(cost[i][j] != 0){
                        res1 += cost[i][j];
                        cost[i][j] = 0;
                        cost[j][i] = 0;
                    }
                }
            }
        }
        //?????§?±???????res1??\?????????????????????????????????
        for(i = 0; i < N; i++)for(j = i+1; j < N;j++) res2 += cost[i][j];
        int r=0;
        //???????????¬??\???????????¶?????´???
        for(i = 0; i < N; i++){
            if(bridge[i] > 1){
                r = dfs(i,-1);
            }
            maxi=max(maxi,r);
        }
        
        printf("%d\n", res1+res2*3-maxi);
    }
    return 0;
}