85分 过不了8,9,10测试点 求大佬看看 orz
查看原帖
85分 过不了8,9,10测试点 求大佬看看 orz
252967
XHua楼主2020/9/24 21:14
#include<bits/stdc++.h>
using namespace std;
const int m=500005;
struct note{
	int to;
	int next;
}e[m];
long long n,f[m],head[m],sum;
long long k[m],q[m],top,ct[m];
long long ans;
char a[m];
void add(int x,int y){
	e[++sum].to=y;
	e[sum].next=head[x];
	head[x]=sum;
}
void dfs(int x){
	int flag,t;
	if(a[x]=='('){
		q[++top]=x;
		flag=1;
	}
	if(a[x]==')')
		if(top!=0){
			t=q[top];
			ct[x]=ct[f[t]]+1;
			top--;
			flag=2;
		}
	k[x]=k[f[x]]+ct[x];
	for(long long i=head[x];i;i=e[i].next)
		dfs(e[i].to);
	if(flag==1)top--;
	if(flag==2)q[++top]=t;
}
int main(){
	scanf("%lld",&n);
	scanf("%s",a+1);
	for(long long i=2;i<=n;i++){
		long long x;
		scanf("%lld",&x);
		f[i]=x;
		add(x,i);
	}
	dfs(1);
	for(long long i=2;i<=n;i++)
		ans^=i*k[i];
	printf("%lld",ans);
	return 0;
}
2020/9/24 21:14
加载中...