对称二叉树
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, ans = 1, h;
struct Node{
int l, r, val;
}m[N];
bool pan(int l, int r){
++h;
if(l == -1 && r == -1) return 1;
if(l != -1 && r == -1 || l == -1 && r != -1 || m[l].val != m[r].val) return 0;
return pan(m[l].l, m[r].r) && pan(m[l].r, m[r].l);
}
void k(int x){
h = 0;
if(pan(m[x].l, m[x].r)) ans = max(ans, h);
}
signed main(){
cin >> n;
for(int i = 1; i <= n; ++i) cin >> m[i].val;
for(int i = 1; i <= n; ++i) cin >> m[i].l >> m[i].r;
for(int i = 1; i <= n; ++i) k(i);
cout << ans << endl;
return 0;
}