比赛 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;
}