#include<bits/stdc++.h>
using namespace std;
int n,ans;
struct node{int c1,c2,val,size;}tr[1000005];
int cnt(int u){return u==-1?0:cnt(tr[u].c1)+cnt(tr[u].c2)+1;}
bool flg(int u,int v){
return u==v==-1||tr[u].val==tr[v].val&&flg(tr[u].c1,tr[v].c2)&&u!=-1&&v!=-1&&flg(tr[u].c2,tr[v].c1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>tr[i].val;
for(int i=1;i<=n;i++) cin>>tr[i].c1>>tr[i].c2;
cnt(1);
for(int i=1;i<=n;i++) if(flg(tr[i].c1,tr[i].c2)) ans=max(ans,cnt(i));
cout<<ans;
}