比赛 |
EYOI常规赛 4th |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
括号树 |
最终得分 |
100 |
用户昵称 |
lihaoze |
运行时间 |
0.251 s |
代码语言 |
C++ |
内存使用 |
10.81 MiB |
提交时间 |
2022-05-27 21:17:23 |
显示代码纯文本
#include <bits/stdc++.h>
using i64 = long long;
const int N = 500010;
i64 n, res, p[N];
i64 f[N], g[N], cnt[N];
char a[N];
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
freopen("2019brackets.in", "r", stdin);
freopen("2019brackets.out", "w", stdout);
std::cin >> n >> a + 1;
for (int i = 2; i <= n; ++ i) std::cin >> p[i];
for (int i = 1; i <= n; ++ i) {
int x = p[i];
f[i] = f[x], g[i] = g[x];
if (a[i] == '(') g[i] = i;
else if (g[i]) cnt[i] = cnt[p[g[i]]] + 1, g[i] = g[p[g[i]]], f[i] += cnt[i];
res ^= i * f[i];
}
std::cout << res << '\n';
return 0;
}