#include <cstdio>
#include <iostream>
#include <complex>
#include <vector>
#include <utility>
#include <algorithm>
#include <cassert>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
int N;
int P[810], D[810];
int deg[810];
vector<pair<int, int> > adj[810];
pair<int, int> farthest(int v, int p) {
pair<int, int> res = make_pair(0, v);
for (const auto &e : adj[v]) {
if (e.first == p) continue;
pair<int, int> p = farthest(e.first, v);
res = max(res, make_pair(p.first + e.second, p.second));
}
return res;
}
int main() {
for (;;) {
scanf("%d", &N);
if (N == 0) return 0;
memset(deg, 0, sizeof(deg));
for (int i = 1; i <= N - 1; ++i) {
scanf("%d", &P[i]);
--P[i];
++deg[i];
++deg[P[i]];
}
for (int i = 1; i <= N - 1; ++i) {
scanf("%d", &D[i]);
}
rep (v, N) adj[v].clear();
for (int p = 1; p <= N - 1; ++p) {
int q = P[p];
if (deg[p] == 1 || deg[q] == 1) continue;
adj[p].emplace_back(q, D[p]);
adj[q].emplace_back(p, D[p]);
}
pair<int, int> p1;
rep (v, N) {
if (deg[v] == 1) continue;
p1 = farthest(v, -1);
break;
}
pair<int, int> p2 = farthest(p1.second, -1);
int S1 = 0, S2 = 0;
for (int p = 1; p <= N - 1; ++p) {
int q = P[p];
S1 += D[p];
if (deg[p] > 1 && deg[q] > 1) {
S2 += D[p];
}
}
printf("%d\n", S1 + S2 + S2 - p2.first);
}
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y29tcGxleD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjYXNzZXJ0PgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgcmVwKGksIG4pIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCkobik7IGkrKykKCmludCBOOwppbnQgUFs4MTBdLCBEWzgxMF07CgppbnQgZGVnWzgxMF07CnZlY3RvcjxwYWlyPGludCwgaW50PiA+IGFkals4MTBdOwoKcGFpcjxpbnQsIGludD4gZmFydGhlc3QoaW50IHYsIGludCBwKSB7CiAgcGFpcjxpbnQsIGludD4gcmVzID0gbWFrZV9wYWlyKDAsIHYpOwogIGZvciAoY29uc3QgYXV0byAmZSA6IGFkalt2XSkgewogICAgaWYgKGUuZmlyc3QgPT0gcCkgY29udGludWU7CiAgICBwYWlyPGludCwgaW50PiBwID0gZmFydGhlc3QoZS5maXJzdCwgdik7CiAgICByZXMgPSBtYXgocmVzLCBtYWtlX3BhaXIocC5maXJzdCArIGUuc2Vjb25kLCBwLnNlY29uZCkpOwogIH0KICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpIHsKICBmb3IgKDs7KSB7CiAgICBzY2FuZigiJWQiLCAmTik7CiAgICBpZiAoTiA9PSAwKSByZXR1cm4gMDsKCiAgICBtZW1zZXQoZGVnLCAwLCBzaXplb2YoZGVnKSk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOIC0gMTsgKytpKSB7CiAgICAgIHNjYW5mKCIlZCIsICZQW2ldKTsKICAgICAgLS1QW2ldOwogICAgICArK2RlZ1tpXTsKICAgICAgKytkZWdbUFtpXV07CiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOIC0gMTsgKytpKSB7CiAgICAgIHNjYW5mKCIlZCIsICZEW2ldKTsKICAgIH0KCiAgICByZXAgKHYsIE4pIGFkalt2XS5jbGVhcigpOwogICAgZm9yIChpbnQgcCA9IDE7IHAgPD0gTiAtIDE7ICsrcCkgewogICAgICBpbnQgcSA9IFBbcF07CiAgICAgIGlmIChkZWdbcF0gPT0gMSB8fCBkZWdbcV0gPT0gMSkgY29udGludWU7CiAgICAgIGFkaltwXS5lbXBsYWNlX2JhY2socSwgRFtwXSk7CiAgICAgIGFkaltxXS5lbXBsYWNlX2JhY2socCwgRFtwXSk7CiAgICB9CgogICAgcGFpcjxpbnQsIGludD4gcDE7CiAgICByZXAgKHYsIE4pIHsKICAgICAgaWYgKGRlZ1t2XSA9PSAxKSBjb250aW51ZTsKICAgICAgcDEgPSBmYXJ0aGVzdCh2LCAtMSk7CiAgICAgIGJyZWFrOwogICAgfQogICAgcGFpcjxpbnQsIGludD4gcDIgPSBmYXJ0aGVzdChwMS5zZWNvbmQsIC0xKTsKCiAgICBpbnQgUzEgPSAwLCBTMiA9IDA7CiAgICBmb3IgKGludCBwID0gMTsgcCA8PSBOIC0gMTsgKytwKSB7CiAgICAgIGludCBxID0gUFtwXTsKICAgICAgUzEgKz0gRFtwXTsKICAgICAgaWYgKGRlZ1twXSA+IDEgJiYgZGVnW3FdID4gMSkgewogICAgICAgIFMyICs9IERbcF07CiAgICAgIH0KICAgIH0KICAgIHByaW50ZigiJWRcbiIsIFMxICsgUzIgKyBTMiAtIHAyLmZpcnN0KTsKICB9Cn0K