64pts求调
查看原帖
64pts求调
547238
篮网总冠军楼主2024/10/3 22:43
#include <bits/stdc++.h>
using namespace std;

int s[1000005];
struct node{
	int z,y;
}zy[1000005];
int ans;
string st[1000005];
int dep[1000005];
bool pd(string s){
	int r=s.length();
	for(int i=1;i<=r/2;i++){
		if (s[i-1]!=s[r-i]) return false;
	}
	return true;
}
void dfs(int w){
	int cnt=0;
	dep[w]++;
	if (zy[w].z!=-1){
		cnt++;
		dfs(zy[w].z);
		dep[w]+=dep[zy[w].z];
		st[w]+=st[zy[w].z];
	}
	st[w]+=(char)('0'+s[w]); 
	if (zy[w].y!=-1){
		cnt++;
		dfs(zy[w].y);
		dep[w]+=dep[zy[w].y];
		st[w]+=st[zy[w].y];
	}
	if (cnt==0) ans=max(ans,1);
	if (cnt==1) return;
	if (cnt==2&&pd(st[w])&&dep[zy[w].z]==dep[zy[w].y]) ans=max(ans,(int)(st[w].length()));
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	ios::sync_with_stdio(false);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>s[i];
	for(int i=1;i<=n;i++){
		cin>>zy[i].z>>zy[i].y;
	}
	dfs(1);
	cout<<ans<<endl;
	return 0;
}
2024/10/3 22:43
加载中...