#include<bits/stdc++.h>
using namespace std;
struct emp{
int wealth;
int boss;
int num;
};
vector<int> w, d;
void dfs(vector<emp> am[], emp start){
int counter = 0;
w.push_back(start.wealth);
for(int i=0; i<am[start.num].size(); i++){
counter = *max_element(w.begin(), w.end()) - am[start.num][i].wealth;
d.push_back(counter);
dfs(am, am[start.num][i]);
w.pop_back();
}
}
int main(){
int n;
cin >> n;
vector<emp> empl(n+2);
for(int i=1; i<=n; i++){
cin >> empl[i].wealth;
empl[i].num = i;
}
for(int i=1; i<=n; i++){
cin >> empl[i].boss;
if(empl[i].boss==-1){
empl[i].boss = 0;
}
}
vector<emp> am[n+2];
for(int i=1; i<=n; i++){
am[empl[i].boss].push_back(empl[i]);
}
dfs(am, am[0][0]);
cout << *max_element(d.begin(), d.end());
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBlbXB7CiAgICBpbnQgd2VhbHRoOwogICAgaW50IGJvc3M7CiAgICBpbnQgbnVtOwp9OwoKdmVjdG9yPGludD4gdywgZDsKCnZvaWQgZGZzKHZlY3RvcjxlbXA+IGFtW10sIGVtcCBzdGFydCl7CiAgICBpbnQgY291bnRlciA9IDA7CiAgICB3LnB1c2hfYmFjayhzdGFydC53ZWFsdGgpOwogICAgZm9yKGludCBpPTA7IGk8YW1bc3RhcnQubnVtXS5zaXplKCk7IGkrKyl7CiAgICAgICAgY291bnRlciA9ICptYXhfZWxlbWVudCh3LmJlZ2luKCksIHcuZW5kKCkpIC0gYW1bc3RhcnQubnVtXVtpXS53ZWFsdGg7CiAgICAgICAgZC5wdXNoX2JhY2soY291bnRlcik7CiAgICAgICAgZGZzKGFtLCBhbVtzdGFydC5udW1dW2ldKTsKICAgICAgICB3LnBvcF9iYWNrKCk7CiAgICB9Cn0KCmludCBtYWluKCl7CiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwogICAgdmVjdG9yPGVtcD4gZW1wbChuKzIpOwogICAgZm9yKGludCBpPTE7IGk8PW47IGkrKyl7CiAgICAgICAgY2luID4+IGVtcGxbaV0ud2VhbHRoOwogICAgICAgIGVtcGxbaV0ubnVtID0gaTsKICAgIH0KICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspewogICAgICAgIGNpbiA+PiBlbXBsW2ldLmJvc3M7CiAgICAgICAgaWYoZW1wbFtpXS5ib3NzPT0tMSl7CiAgICAgICAgICAgIGVtcGxbaV0uYm9zcyA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIHZlY3RvcjxlbXA+IGFtW24rMl07CgogICAgZm9yKGludCBpPTE7IGk8PW47IGkrKyl7CiAgICAgICAgYW1bZW1wbFtpXS5ib3NzXS5wdXNoX2JhY2soZW1wbFtpXSk7CiAgICB9CgogICAgZGZzKGFtLCBhbVswXVswXSk7CgogICAgY291dCA8PCAqbWF4X2VsZW1lbnQoZC5iZWdpbigpLCBkLmVuZCgpKTsKfQo=