神秘RE?
查看原帖
神秘RE?
604906
Guizy楼主2024/1/19 17:48
#include<bits/stdc++.h>
#define Max 500001
#define int long long
using namespace std;

int k,n,a[Max],fa[Max];
int tmp,ans[Max],sum[Max];
char ch[Max];
vector<int>G[Max];

struct Stack_{
	int st[Max],tp=0;
	void pop(){tp--;}
	int top(){return st[tp];}
	bool empty(){return tp==0;}
	void push(int x){st[++tp]=x;}
}s;

void dfs(int u){

	int tmp;
	if(ch[u]==')'){
		if(!s.empty())
		tmp=s.top(),s.pop(),
		ans[u]=ans[fa[tmp]]+1;
	}
	else s.push(u);
	sum[u]=ans[u]+sum[fa[u]];
	k^=sum[u]*u;
	
	for(auto v:G[u]) 
		dfs(v);

	if(tmp) s.push(tmp);
	else s.pop();
}

signed main(){
	
//	freopen("brackets.in","r",stdin);
//	freopen("brackets.out","w",stdout);
	
	scanf("%lld",&n);
	for(int i=1;i<=n;i++) cin>>ch[i];
	for(int i=2;i<=n;i++){
		scanf("%lld",&fa[i]),G[fa[i]].push_back(i);
	}
	dfs(1);
	printf("%lld",k);
}
2024/1/19 17:48
加载中...