n为5e5的时候对了,2e3的时候错了?
查看原帖
n为5e5的时候对了,2e3的时候错了?
200116
dshzsh楼主2020/7/29 11:50
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
char a[maxn];
vector <int> son[maxn];
long long gx[maxn];
int fa[maxn];
long long sum[maxn],ans;
int zz[maxn],ztop=0;
int xz[maxn];
void dfs(int x)
{
	if(a[x]=='(')
	{
		zz[++ztop]=fa[x];
	}
	else if(ztop!=0)
	{
		gx[x]=gx[zz[ztop]]+1;
		ztop--;
	}
	sum[x]=sum[fa[x]]+gx[x];
	ans=ans^(sum[x]*x);
	int xxz=ztop;
	memcpy(xz,zz,ztop+1);
	int ss=son[x].size();
	for(int i=0;i<ss;i++)
	{
		int sx=son[x][i];
		ztop=xxz;
		memcpy(zz,xz,ztop+1);
		dfs(sx);
	}
}
signed main()
{
	int n;
	scanf("%d",&n);
	scanf("%s",a);
	for(int i=n;i>=1;i--)
		a[i]=a[i-1];
	for(int i=1;i<n;i++)
	{
		scanf("%d",&fa[i+1]);
		son[fa[i+1]].push_back(i+1);
	}
	dfs(1);
	printf("%lld",ans);
	return 0;
}

rt,wa了8-10

2020/7/29 11:50
加载中...