#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct qq{
int l=-1,r=-1,mid=-1;
} MAP[100000];
int SWAP(int a,int b){
if((a==-1&&b==-1)||a==b) return 1;
if(a==-1||b==-1||a!=b) return 0;
return (SWAP(MAP[a].l,MAP[b].r)&&SWAP(MAP[a].r,MAP[b].l));
}
int qh(int x){
if(x==-1) return 0;
return qh(MAP[x].l+MAP[x].r)+1;
}
int n,h;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>MAP[i].mid;
for(int i=1;i<=n;i++) cin>>MAP[i].l>>MAP[i].r;
for(int i=1;i<=n;i++) if(SWAP(i,i)) h=max(h,qh(i));
cout<<h;
return 0;
}
求调