85pts求调
查看原帖
85pts求调
686342
Jim_Franklin楼主2024/1/14 21:42
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ri register
#define pii pair<int,int>
const int inf=0x3f3f3f3f;
inline int rd() {
	int x=0,y=1;char c=getchar();
	for(;c<'0'||c>'9';c=getchar())if(c=='-')y=-1;
	for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
	return x*y;
}
const int N=5e5+5;
int n,fa[N],pre[N],sum[N],t,ans;
char s[N];
stack<int>st;
vector<int>e[N];
void dfs(int x) {
	t=0;
	if(s[x]==')'&&!st.empty())
		t=st.top(),pre[x]=pre[fa[t]]+1,st.pop();
	else if(s[x]=='(') st.push(x);
	sum[x]=sum[fa[x]]+pre[x];
	for(auto i:e[x]) dfs(i);
	if(t) st.push(t);
	else if(!st.empty()) st.pop();
}
signed main() {
	n=rd();cin>>s+1;
	for(int i=2;i<=n;i++)
		fa[i]=rd(),e[fa[i]].push_back(i);
	dfs(1);
	for(int i=1;i<=n;i++) ans^=i*sum[i];
	cout<<ans;
	return 0;
}

讨论区里的错误都检查过了,无果,求调

2024/1/14 21:42
加载中...