1 条题解
-
0117爱好者 (mengqingyu) LV 10 @ 2024-7-29 14:32:13
#include<bits/stdc++.h> #define ull unsigned long long using namespace std; int n,fa[500100],last[500100],line[500100]; ull f[500100]; char c[500100]; void pre( ){ scanf("%d",&n); int i; getchar( ); for(i=1;i<=n;i++) c[i]=getchar( ); getchar( ); for(i=2;i<=n;i++) scanf("%d",&fa[i]); fa[1]=0; f[1]=0; last[1]=c[1]=='('?1:0; line[1]=0; return; } ull dfs(int k){ if(f[k]||k==1)return f[k]; dfs(fa[k]); if(c[k]=='('){ last[k]=k; f[k]=f[fa[k]]; line[k]=0; }else if(last[fa[k]]){ f[k]=f[fa[k]]+line[fa[last[fa[k]]]]+1; last[k]=last[fa[last[fa[k]]]]; line[k]=line[fa[last[fa[k]]]]+1; }else{ last[k]=0; f[k]=f[fa[k]]; line[k]=0; } return f[k]; } int main( ){ pre( ); ull ans=0; int i; for(i=2;i<=n;i++)ans=ans xor dfs(i)*i; cout<<ans<<endl; return 0; }
- 1
信息
- ID
- 790
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 30
- 已通过
- 6
- 上传者