85pts,8-10到底是什么
查看原帖
85pts,8-10到底是什么
220509
国国の国王楼主2020/11/4 18:00
#include<bits/stdc++.h>
using namespace std;
char a[500001];
int fa[500001];
struct road{
	int to,nex;
}f[500001*2];
int las[500001],tp;
int puts(int a,int b){
	f[++tp].to=b;
	f[tp].nex=las[a];
	las[a]=tp;
}
char k[500001];
int zuo[500001],ff[500001];
long long sum;
long long asd(int now,int top){
	long long ans=0; 
	if(top){
		int s=zuo[top];
		ans=ff[s-1]+1;
	}
	ff[now]=ans;
	return ans;
}
int dfs(int now,int fa,int size,int top,long long ans){
	k[++size]=a[now];
	int fl=0;
	if(a[now]=='(') zuo[++top]=size;
	else{
		if(top==0) fl=ff[zuo[top]],ff[zuo[top]]=0;
		ans+=asd(size,top);
		if(top) top--;
	}
	sum^=now*ans;
//	cout<<now<<' '<<top<<' '<<ans<<endl;
	for(int i=las[now];i;i=f[i].nex){
		if(f[i].to==fa) continue;
		dfs(f[i].to,now,size,top,ans);
	} 
	ff[size]=0;
	if(fl) ff[zuo[top]]=fl;
//	if(a[now]=='(') zuo[top]=0;
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i]; 
	for(int i=2;i<=n;i++) cin>>fa[i],puts(fa[i],i),puts(i,fa[i]);
	dfs(1,0,0,0,0);
	cout<<sum<<endl;
} 

8-10WA,其他AC;

2020/11/4 18:00
加载中...