求助 dfs序+manacher WA+RE 40pts
查看原帖
求助 dfs序+manacher WA+RE 40pts
54372
A_Đark_Horcrux楼主2020/11/25 20:30

RT QAQ

代码有没有问题,或者思路是不是对的

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=3e6+10;//manacher数组开双倍了
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 ;
}//预处理dfs序、马拉车
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);
	//puts(s);
    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;
}
2020/11/25 20:30
加载中...