代码中注释处即区别,求dalao解释一下
#include<bits/stdc++.h>
using std::max;
const int N=1e6+5;
struct tree{
int l,r,w;
}t[N<<1];
int n;
void read(int &x){
int f=1;
char c=getchar();
for(;!isdigit(c);c=getchar())
if(c=='-') f=-1;
for(;isdigit(c);c=getchar())
x=x*10+c-48;
x*=f;
}
void input(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
read(t[i].w);
for(int i=1;i<=n;i++)
read(t[i].l),read(t[i].r);
}
bool sym(int a,int b){
if(a==-1&&b==-1) return 1;
if(a==-1||b==-1||t[a].w!=t[b].w) return 0;
return sym(t[a].l,t[b].r)&&sym(t[a].r,t[b].l);//就这里,速度上差了不少
}
int num[N];
int dfs(int rt){
if(rt==-1) return 0;
return num[rt]=dfs(t[rt].l)+dfs(t[rt].r)+1;
}
int ans=-1;
void slove(){
for(int i=1;i<=n;i++)
if(sym(t[i].l,t[i].r))
if(num[i]>ans)
ans=num[i];
printf("%d",ans);
}
int main(){
input();
dfs(1);
slove();
return 0;
}