#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
struct Node{
int v;
int l,r;
}tree[N];
int cnt[N];
int n;
bool check(int l,int r){
if(l==-1&&r==-1) return true;
if(l==-1||r==-1) return false;
if(tree[l].v!=tree[r].v) return false;
if(check(tree[l].l,tree[r].r)&&check(tree[l].r,tree[r].l)) return true;
}
int count(int r){
if(r==-1) return 0;
cnt[r]=count(tree[r].l)+count(tree[r].r)+1;
return cnt[r];
}
int main(){
scanf("%d",&n);
for(int i=1; i<=n; i++) scanf("%d",&tree[i].v);
for(int i=1; i<=n; i++) scanf("%d%d",&tree[i].l,&tree[i].r);
count(1);
int maxn=0;
for(int i=1; i<=n; i++){
if(check(tree[i].l,tree[i].r)){
maxn=max(maxn,cnt[i]);
}
}
printf("%d",maxn);
return 0;
}