#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],l[N],r[N];
int n;
int s[N];
void dfs(int u){
if(!u) return;
dfs(l[u]);
dfs(r[u]);
s[u]=s[l[u]]+s[r[u]]+1;
}
int check(int ll,int rr){
if(ll==0&&rr==0) return 1;
if(ll==0||rr==0) return 0;
if(s[ll]!=s[rr]||a[ll]!=a[rr]) return 0;
return check(l[ll],r[ll])&&check(l[rr],r[rr]);
}
int ans=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>l[i]>>r[i];
if(l[i]==-1) l[i]=0;
if(r[i]==-1) r[i]=0;
}
dfs(1);
for(int i=1;i<=n;i++){
if(s[i]>ans&&check(l[i],r[i])) ans=s[i];
}
cout<<ans;
return 0;
}
初看是不是感觉没什么问题,注意到 17 行。
return check(l[ll],r[ll])&&check(l[rr],r[rr]);
验证码 6mwy