按照一篇题解思路大致复刻的
#include<bits/stdc++.h>
using namespace std;
int n,l[1000003],r[1000003],v[1000003],maxn=-100;
void dfs(int x,int y,int a){
if(x==-1 && y!=-1) return;
if(y==-1 && x!=-1) return;
if(a>maxn) maxn=a;
if(a==n) return;
if(v[l[x]]==v[r[y]]) dfs(l[x],r[y],a+2);
if(v[r[x]]==v[l[y]]) dfs(r[x],l[y],a+2);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>v[i];
for(int i=1;i<=n;i++) cin>>l[i]>>r[i];
dfs(l[1],r[1],3);
if(maxn>0) cout<<maxn;
else cout<<1;
return 0;
}
码风比较丑 求调悬关orz