UOJ Logo jxy2012的博客

博客

#489. 【CSP-S 2019】括号树

2023-10-30 14:50:28 By jxy2012

大家帮我看一看为什么97

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=500005;
vector<int> G[N];
ll f[N],ans;
int c[N],a[N];
char s[N];
void dfs(int u,int fa){
    a[u]=a[fa]+(s[u]=='('?1:-1);
    f[u]=f[fa]+c[a[u]];
    c[a[u]]++;
    int tmp=0;
    if(s[u]==')')tmp=c[a[fa]],c[a[fa]]=0;
    for(auto v:G[u]){
        dfs(v,u);
    }
    c[a[u]]--;
    if(s[u]==')')c[a[fa]]=tmp;
}
int main(){
    int n;
    scanf("%d",&n);
    scanf("%s",s+1);
    for(int i=2,x;i<=n;i++){
        scanf("%d",&x);
        G[x].push_back(i);
    }
    c[0]++;
    dfs(1,0);
    for(int u=1;u<=n;u++)ans^=u*f[u];
    printf("%lld\n",ans);
    return 0;
}

思考熊

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。