#include <bits/stdc++.h> using namespace std; vector<pair<int,vector<int>>>d(1010); int n,k,ma=0xc0c0c0c0; int dfs(int k) { int res1=0,res2=0; if(!d[k].second.empty())res1=max(dfs(d[k].second[0]),0); if(d[k].second.size()==2)res2=max(dfs(d[k].second[1]),0); ma=max(ma,res1+res2+d[k].first); return max(res1,res2)+d[k].first; } int main() { d[0].first=0; cin>>n; for(int i=1;i<=n;i++) cin>>d[i].first; for(int i=1;i<=n;i++) { cin>>k; d[k].second.push_back(i); } dfs(d[0].second[0]); cout<<ma<<endl; return 0; }