正经题解
2025-06-15 10:20:12
发布于:浙江
3阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int n;
string s;
vector<vector<int>> c;
ll ans;
vector<int> stk;
vector<ll> d, su;
void dfs(int u){
int dep = d.size(), m = -1;
if(s[u-1]=='(') stk.push_back(dep);
else if(!stk.empty()){ m = stk.back(); stk.pop_back(); }
ll x = 0;
if(m != -1) x = 1 + (m>0 ? d[m-1] : 0);
d.push_back(x);
su.push_back((dep>0 ? su[dep-1] : 0) + x);
ans ^= (ll)u * su[dep];
for(int v : c[u]) dfs(v);
d.pop_back(); su.pop_back();
if(m != -1) stk.push_back(m);
if(s[u-1]=='(') stk.pop_back();
}
int main(){
cin>>n>>s;
c.assign(n+1, {});
for(int i=2,p;i<=n;i++){ cin>>p; c[p].push_back(i); }
dfs(1);
cout<<ans;
}
全部评论 1
顶!
19小时前 来自 浙江
0
有帮助,赞一个