RT QAQ
代码有没有问题,或者思路是不是对的
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=3e6+10;
int n,cnt,len=1,t,r,mid,maxx=1,i;
int a[N],left[N],right[N],f[N],palin[N]; char s[N];
void dfs(int now)
{
s[++len]=a[now],s[++len]='|';
if(left[now]!=-1) dfs(left[now]);
if(right[now]!=-1) dfs(right[now]);
s[++len]=a[now],s[++len]='|'; return ;
}
int main()
{
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
for(i=1;i<=n;i++) scanf("%d %d",&left[i],&right[i]);
s[0]='$',s[1]='|',dfs(1);
for(t=1;t<=len;t++)
{
if(t<=r) palin[t]=min(palin[(mid<<1)-t],r-t+1);
while(s[t-palin[t]]==s[t+palin[t]]) palin[t]++;
if(palin[t]+t>r) r=palin[t]+t-1,mid=t;
maxx=max(maxx,palin[t]);
}
printf("%d",(maxx-1)/2);
return 0;
}