#include <bits/stdc++.h>
using namespace std;
const int maxN = 200005;
int dp[maxN][2];
void maxSelf(int &x, int y) {
if (y > x) {
x = y;
}
}
int findSample(int n,int confidence[],int host[],int protocol[]) {
for (int i = 0; i < n; i++) {
dp[i][1] = confidence[i];
}
for (int i = n - 1; i; i--) {
// cout << i << ' ' << dp[i][0] << ' ' << dp[i][1] << '\n';
int x = host[i];
int p = dp[x][1];
int q = dp[x][0];
if (protocol[i] == 0) {
maxSelf(dp[x][1], p + dp[i][0]);
maxSelf(dp[x][0], q + max(dp[i][0], dp[i][1]));
}
if (protocol[i] == 1) {
maxSelf(dp[x][0], q + dp[i][0]);
maxSelf(dp[x][1], q + dp[i][1]);
maxSelf(dp[x][1], p + max(dp[i][0], dp[i][1]));
}
if (protocol[i] == 2) {
maxSelf(dp[x][0], q + dp[i][0]);
maxSelf(dp[x][1], p + dp[i][0]);
maxSelf(dp[x][1], q + dp[i][1]);
}
}
return max(dp[0][0], dp[0][1]);
}