全WA求调(悬关)
查看原帖
全WA求调(悬关)
849113
zhangshuhang2011楼主2024/11/7 13:49

奇怪的是样例毫无问题

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, fa[500005], val[500005], sum[500005];
char str[500005];
stack<int> stk;
vector<int> sons[500005];
void dfs(int u){
    int pos;
    if(str[u] == '('){
        stk.push(u);
        pos = 0;
    }else{
        if(!stk.empty()){
            pos = stk.top();
            stk.pop();
        }else{
            pos = -1;
        }
    }
    if(pos <= 0){
        val[u] = 0;
    }else{
        val[u] = val[fa[pos]] + 1;
    }
    for(int v : sons[u]){
        dfs(v);
    }
    sum[u] = val[u] + sum[fa[u]];
    if(pos == 0){
        stk.pop();
    }else if(pos > 0){
        stk.push(pos);
    }
}
int ans = 0;
signed main(){
    cin >> n >> str+1;
    for(int i = 2; i <= n; i++){
        cin >> fa[i];
        sons[fa[i]].push_back(i);
    }
    dfs(1);
    for(int i = 1; i <= n; i++){
        ans ^= sum[i]*i;
    }
    cout << ans;
    return 0;
}
2024/11/7 13:49
加载中...