```cpp
#include<bits/stdc++.h>
using namespace std;
struct node
{
int v,l,r;
}tree[1000005];
int n,mmax=1;
bool check(long long i,long long j)
{//dfs check
if(i==-1&&j==-1)return true;
else if(i==-1||j==-1)return false;
else if(tree[i].v!=tree[j].v)return false;
else return check(tree[i].l,tree[j].r)&&check(tree[i].r,tree[j].l);
}
int palindrome_tree(long long ind)
{
return ind==-1? 0:palindrome_tree(tree[ind].l)+palindrome_tree(tree[ind].r)+1;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>tree[i].v;
for(int i=1;i<=n;i++)cin>>tree[i].l>>tree[i].r;
for(int i=1;i<=n;i++)
{
if(check(i,i))mmax=max(mmax,palindrome_tree(i));
}
cout<<mmax;
return 0;
}
```
by tuohai @ 2023-10-04 14:27:16