#include<bits/stdc++.h>
using namespace std;
int q[1000010],son[1000010][3],size[1000010],z[1000010];
bool dfs (int u) {
// size[u]=1;
if(z[u]==0)return 0;
if(z[u]==1) return 1;
if(son[u][1]==-1&&son[u][2]==-1) {
z[u]=1;
return 1;
}
if(son[u][1]==-1||son[u][2]==-1) {
z[u]=0;
return 0;
}
if(size[son[u][1]]!=size[son[u][2]]) {
z[u]=0;
return 0;
}
return dfs(son[u][1])&&dfs(son[u][2]);
}
int ji(int h) {
if(h==-1)
return 0;
else
return ji(size[son[h][1]])+ji(size[son[h][2]])+1;
}
int main() {
int n,maxx=-1,i;
memset(size,1,sizeof(size));
memset(z,-1,sizeof(z));
cin>>n;
for(i=1; i<=n; i++)
cin>>q[i];
for(i=1; i<=n; i++) {
cin>>son[i][1]>>son[i][2];
}
for(i=1; i<=n; i++)
if(dfs(i))
maxx=max(maxx,ji(i));
cout<<maxx;
return 0;
}