#include <stdio.h>
#define N 1000

int s[N][N]; // ??¶??¨???
int max;
int n;

void dfs(int bef, int now, int cost){
  int i;
  if(cost > max) max = cost;
  // ?????¨?????¶????????????????????????????????????
  for(i = 0; i <= n - 1; i++){
    // ??????????????£???????????????????????£?????¶?????????????????????
    if(s[now][i] != 0 && s[now][i] != -1 && i != bef){
      dfs(now, i, cost + s[now][i]); // ?????°????????????????????´??°????????????
    }
  }
}

int main(void){
  int i, j, o = 0, c1 ; // ?¨??????????????????????????????????????????????????????????
  int c2; // c1??\???
  int result[N];
  while(1){
    // ???????????????
    n = 0;
    max = 0;
    c1 = 0;
    c2 = 0;
    int col[N] = {};
    int row[N] = {};
    for(i = 0; i < N; i++){
      for(j = 0; j < N; j++){
        s[i][j] = 0;
      }
    }

    scanf("%d", &n);

    if(n == 0) break;
    int count = 0;
    for(i = 0; i <= n - 2; i++){
      int p;
      scanf("%d", &p);
      col[count] = p - 1;
      row[count] = i + 1;
      count++;
    }

    for(i = 0; i <= n - 2; i++){
      int l;
      scanf("%d", &l);
      s[col[i]][row[i]] = l;
      s[row[i]][col[i]] = l;
    }

    // ??°????????????????????????????´???§?????????????????????????¨??????????????????????????¨????????????¨????£???????????£??????????????????????-1?????????
    for(i = 0 ; i <= n - 1; i++){
      int d = 0, z = 0, _c = 0;
      for(j = 0; j <= n - 1; j++){
        if(s[i][j] != 0){
          d = i;
          z = j;
          _c++;
        }
      }
      if(_c == 1){
        c1 += s[d][z];
        s[d][z] = -1;
        s[z][d] = -1;
      }
    }

    // ??°???????????´???????±???????
    for(i = 0; i <= n - 1; i++){
      dfs(-1, i, 0);
    }
    
    // ?????¬?????????????????????+????????????????\??????????????????¬???????????????????????????????????????????????????????????°???????????????????????????????????????????????§????????????????????¨?????´????????????????\???????
    // ???????????????????????????????????£????¬??????¶?????????+????????????????\???????????????§??????????????????????????????????????§??????????????£????????¨???????????????????????¨?????´????????????????\???????
    // ????????????????????°??????????????????island[i].num == 1??§????????¶???????????£??????????????????????????????????????????????????°?????????
    for(i = 0 ; i < n; i++){
      for(j = 0; j < n; j++){
        if(s[i][j] != -1) c2 += s[i][j];
      }
    }
    result[o] = c1 + 3 * (c2 / 2) - max;
    o++;
  }

  for(i = 0; i < o; i++) printf("%d\n", result[i]);
}