本题可以去判断两棵树是否对称
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+2;
struct node{
int left,right; //left表示左子树,right表示右子树;
int val; //val表示每个结点的权值;
} bt[N];
bool same(int now1,int now2){
//now1 now2代表两棵树
if(now1==-1 && now2==-1){
return true;
}
if(now1==-1 || now2==-1){
return false;
}
if(bt[now1].val!=bt[now2].val){
return false;
}
return same(bt[now1].left,bt[now2].right) && same(bt[now1].right,bt[now2].left);
}
int cum(int now){
if(now==-1){
return 0;
}
return 1+cum(bt[now].left)+cum(bt[now].right);
}
int main(){
int n,ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&bt[i].val);
}
for(int i=1;i<=n;i++){
scanf("%d %d",&bt[i].left,&bt[i].right);
}
for(int i=1;i<=n;i++){
if(same(i,i)){
ans=max(ans,cum(i));
}
}
cout<<ans<<endl;
return 0;
}