#include <bits/stdc++.h>
#include <cstdio>
#include <cmath>
using namespace std;

struct Edge{
	int src,dst,cost;
};
typedef vector< vector<Edge> > G;
G g;

vector<int> tmp;
int dfs(int x,int p,int c){
	tmp.push_back(c);
	int ans = 0;
	for( auto e : g[x] ){
		if( e.dst == p ) continue;
		if( g[e.dst].size() == 1 ){
			ans += e.cost;
		}else{
			ans += 3*e.cost;
			ans += dfs(e.dst,x,c+e.cost);
		}
	}
	return ans;
}
int main(){
	int N;
	while(cin >> N && N){
		g = G(N);
		vector<int> p(N);
		vector<int> c(N);
		for(int i = 0 ; i < N-1 ; i++) cin >> p[i];
		for(int i = 0 ; i < N-1 ; i++) cin >> c[i];
		for(int i = 0 ; i < N-1 ; i++){
			p[i]--;
			g[i+1].push_back({i+1,p[i],c[i]});
			g[p[i]].push_back({p[i],i+1,c[i]});
		}
		int ans = 2e9;
		for(int st = 0 ; st < N ; st++){
			tmp.clear();
			int subans = dfs(st,-1,0);
			for(int j = 0 ; j < tmp.size() ; j++){
				ans = min(ans,subans-tmp[j]);
			}
			
		}
		cout << ans << endl;
	}
	
	
}