巨水代码如下
#include<cstdio>
#include<iostream>
using namespace std;
const int N=1e6+1;
int n;
struct node{
int ls,rs,num,cnt;
}t[N];
int dfs(int p){
if(t[p].cnt)return t[p].cnt;
if(t[t[p].ls].num!=t[t[p].rs].num)return -1;
if(t[p].ls==-1&&t[p].rs==-1)return 1;
int ans1,ans2;
if(t[p].ls!=-1&&t[p].rs!=-1){
ans1=dfs(t[p].ls);
ans2=dfs(t[p].rs);
if(ans1==-1||ans2==-1)return -1;
else return t[p].cnt=ans1+ans2+1;
}
else return -1;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&t[i].num);
for(int i=1;i<=n;i++){
scanf("%d%d",&t[i].ls,&t[i].rs);
t[i].cnt=0;
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,dfs(i));
}
printf("%d",ans);
return 0;
}