#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, dummy, root, ans=INT_MIN;
vector < vector < int > > adj; vector < int > value;
void solve(int node, int maxval)
{
maxval=max(maxval, value[node]);
ans=max(ans, maxval-value[node]);
for (int i=0; i<adj[node].size(); i++) solve(adj[node][i], maxval);
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
adj.resize(n+1);
value.resize(n+1);
for (int i=1; i<=n; i++) cin >> value[i];
for (int i=1; i<=n; i++)
{
cin >> dummy;
if (dummy==-1) root=i;
else adj[dummy].push_back(i);
}
solve(root, value[root]);
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwppbnQgbiwgZHVtbXksIHJvb3QsIGFucz1JTlRfTUlOOwp2ZWN0b3IgPCB2ZWN0b3IgPCBpbnQgPiA+IGFkajsgdmVjdG9yIDwgaW50ID4gdmFsdWU7Cgp2b2lkIHNvbHZlKGludCBub2RlLCBpbnQgbWF4dmFsKQp7CgltYXh2YWw9bWF4KG1heHZhbCwgdmFsdWVbbm9kZV0pOwoJYW5zPW1heChhbnMsIG1heHZhbC12YWx1ZVtub2RlXSk7Cglmb3IgKGludCBpPTA7IGk8YWRqW25vZGVdLnNpemUoKTsgaSsrKSBzb2x2ZShhZGpbbm9kZV1baV0sIG1heHZhbCk7Cn0KCnNpZ25lZCBtYWluKCkKewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUoMCk7CgljaW4gPj4gbjsKCWFkai5yZXNpemUobisxKTsKCXZhbHVlLnJlc2l6ZShuKzEpOwoJZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspIGNpbiA+PiB2YWx1ZVtpXTsKCWZvciAoaW50IGk9MTsgaTw9bjsgaSsrKQoJewoJCWNpbiA+PiBkdW1teTsKCQlpZiAoZHVtbXk9PS0xKSByb290PWk7CgkJZWxzZSBhZGpbZHVtbXldLnB1c2hfYmFjayhpKTsKCX0KCXNvbHZlKHJvb3QsIHZhbHVlW3Jvb3RdKTsKCWNvdXQgPDwgYW5zOwp9