#include <iostream>
using namespace std;
int n,num[1000005],l[1000005],r[1000005];
int cnt[1000005],ans=1;
int dfs(int x)
{
if (x==-1)
return 0;
cnt[x]=dfs(l[x])+dfs(r[x])+1;
}
bool srh(int x)
{
if (l[x]==-1&&r[x]==-1)
{
ans=max(ans,cnt[x]);
return true;
}
if (l[x]==-1||r[x]==-1)
return false;
if (num[l[x]]==num[r[x]]&&srh(l[x])&&srh(r[x]))
{
ans=max(ans,cnt[x]);
return true;
}
return false;
}
int main()
{
cin >> n;
for (int i=1;i<=n;i++)
cin >> num[i];
for (int i=1;i<=n;i++)
cin >> l[i] >> r[i];
dfs(1);
srh(1);
cout << ans;
return 0;
}