#include<stdio.h>
inline int read(){
int k=0,j=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')j=-1;c=getchar();}
while(c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
return k*j;
}
int max(int a,int b){return a>b?a:b;}
struct pp{int lson,rson,num;}a[1000005];
int js,t;
void dfs(int l,int r){
if(l==-1||r==-1){t=1;return;}
if(a[l].num!=a[r].num){t=1;return ;}js+=2;
if(a[l].lson==-1&&a[l].rson==-1&&a[r].lson==-1&&
a[r].rson==-1)return ;
dfs(a[l].lson,a[r].rson);dfs(a[l].rson,a[r].lson);
if(t)return ;
}
int main(){
int n=read(),ans=0;
for(int i=1;i<=n;i++)a[i].num=read();
for(int i=1;i<=n;i++)a[i].lson=read(),a[i].rson=read();
for(int i=1;i<=n;i++){
t=0,js=1;
if(a[i].lson!=-1||a[i].rson!=-1)dfs(a[i].lson,a[i].rson);
if(!t)ans=max(ans,js);
}
printf("%d",ans);
return 0;
}
我的记录 rt,请大佬帮忙看看问题在哪