春节保龄求助!
查看原帖
春节保龄求助!
494699
卷王慢即快楼主2023/1/22 11:47
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 500001;
struct node
{
	int nxt, to;
}e[maxn];
int n, x, cnt = 0, fa[maxn], head[maxn];
ll h[maxn], w[maxn], ans = 0;
string s;
inline void add(int u, int v)
{
	e[++cnt].to = v;
	e[cnt].nxt = h[u];
	h[u] = cnt;
}
inline void dfs(ll x)
{
	w[x] = fa[w[x]];
	if(x == '(') w[x] = x;
	else if(w[x] != 0)
	{
		h[x] = h[fa[w[x]]] + 1;
		w[x] = w[fa[w[x]]];
	}
	for(int i = head[x]; i; i = e[i].nxt)
		dfs(e[i].to);
}
int main()
{
	cin >> n >> s;
	for(int i = 1; i < n; i++)
	{
		cin >> x;
		fa[i] = x;
		add(i, x);
	}
	ans = head[1];
	dfs(1);
	for(int i = 2; i <= n; i++)
	{
		h[i] = h[i] + h[fa[i]];
		ans = ans ^ (i * h[i]);
	}
	cout << ans;
	return 0;
}
2023/1/22 11:47
加载中...