64pts求调
查看原帖
64pts求调
1111742
mincrafter_or_cy楼主2024/8/7 10:47
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000005
int s[maxn];
int w[maxn],k[maxn];
int n;
int cnt=0,ans=1;
int lson[maxn],rson[maxn],rsonsize[maxn],lsonsize[maxn];
void dfs1(int,int,bool);
void dfs2(int);
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",w+i);
	for(int i=1;i<=n;i++)
		scanf("%d %d",lson+i,rson+i);
	dfs1(1,0,1);
	dfs2(1);
	printf("%d",ans);
	return 0;
}
void dfs1(int u,int fa,bool isl){
	if(u==-1) return;
	dfs1(lson[u],u,1);
	s[++cnt]=w[u];
	k[u]=cnt;
	dfs1(rson[u],u,0);
	if(isl) lsonsize[fa]=lsonsize[u]+rsonsize[u]+1;
	else rsonsize[fa]=lsonsize[u]+rsonsize[u]+1;
}
void dfs2(int u){
	if(u==-1) return;
	dfs2(lson[u]);
	dfs2(rson[u]);
	if(lsonsize[u]!=rsonsize[u]) return;
	for(int i=k[u]-1,j=k[u]+1;k[u]-i<=lsonsize[u];i--,j++)
		if(s[i]!=s[j]) return;
	ans=max(ans,lsonsize[u]+rsonsize[u]+1);
}

注:WA

2024/8/7 10:47
加载中...