样例过了,但就对一个点,还有RE
查看原帖
样例过了,但就对一个点,还有RE
910499
2021CJQ楼主2024/8/3 16:35
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,tot,f[N];
long long ans,dp[N],Last[N];
char c[N];
vector <int> v[N];
void dfs(int x)
{
	if(c[x]=='(')Last[x]=x;
	else Last[x]=Last[f[Last[f[x]]]];
	dp[x]=dp[f[x]];
	if(c[x]==')'&&Last[f[x]]!=0)
	dp[x]+=1+dp[f[Last[f[x]]]-dp[f[f[Last[f[x]]]]]];
	for(int i=0;i<v[x].size();i++)
	{
		int child=v[x][i];
		dfs(child);
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) 
		cin>>c[i];
	for(int i=2;i<=n;i++)
	{
		int a;
		scanf("%d",&a);
		f[i]=a;
		v[a].push_back(i);
	}
	dfs(1);
	for(int i=1;i<=n;i++)
		ans^=(i*dp[i]);
	cout<<ans;
	return 0;
}
2024/8/3 16:35
加载中...