这hash怎么就WA了呢60分,求调,谢谢dalao
查看原帖
这hash怎么就WA了呢60分,求调,谢谢dalao
546830
XSean楼主2023/6/28 22:09
# include <bits/stdc++.h>
using namespace std;
# define LL long long
const int p=1919810,mod1=998244353,mod2=998244353,N=1e6+5;
LL pw[N];int n;
int l[N],r[N],v[N],sz[N];
LL Hash[N][2],Hash2[N][2];
int ans;


void dfs(int a){
	if(a==0) return ;
	sz[a]=1;
	dfs(l[a]);
	dfs(r[a]);
	sz[a]+=sz[l[a]]+sz[r[a]];
	Hash[a][0]=((v[a]*pw[sz[l[a]]]+Hash[r[a]][0]*pw[sz[l[a]]+1])+Hash[l[a]][0])%mod1;
	Hash[a][1]=((v[a]*pw[sz[r[a]]]+Hash[l[a]][1]*pw[sz[r[a]]+1])+Hash[r[a]][1])%mod1;
	if(Hash[a][0]==Hash[a][1]) 
	ans=max(ans,sz[a]);
	return ;
}

int main(){
	//freopen("1.in","r",stdin);
	scanf("%d",&n);
	for(int i=pw[0]=1;i<=n;i++) pw[i]=pw[i-1]*p%mod1;
	for(int i=1;i<=n;i++) scanf("%d",&v[i]);
	for(int i=1;i<=n;i++)
	scanf("%d%d",&l[i],&r[i]),l[i]=max(l[i],0),r[i]=max(r[i],0);
	dfs(1);
	printf("%d",ans);
	return 0;
}
2023/6/28 22:09
加载中...