对于特殊性质fi=i-1,原图是一条链,注意到当前节点是‘ (’不会产生贡献,‘)’才会产生,那么思考怎么的计算这个贡献。

()()():每个位置贡献是0,1,0,2,0,3。答案统计出来就是说0,1,1,3,3,6。

())():贡献是0,1,0,0,1。答案是0,1,1,1,2。

()(()):0,1,0,0,1,2.      0,1,1,1,2,4。

右括号需要匹配左括号,所以将左括号的位置加入一个栈中,匹配成功就弹出,每个右括号的贡献就是他所匹配的左括号的前一个右括号的贡献值+1,这样对于链的情况就解决了。

树上也可以用同样的思路,注意递归会对栈有修改,所以回溯时要复原。

 1 #include <bits/stdc++.h>
2 #define inf 0x3f3f3f3f
3 #define ll long long
4 #define maxn 500005
5 //#define loveGsy
6 using namespace std;
7 int n;
8 char c[maxn];
9 int head[maxn], nxt[maxn], to[maxn], cnt, fa[maxn];
10 ll lst[maxn], sum[maxn], ans;
11 int s[maxn], top;
12
13 void add(int u, int v) {
14 nxt[++cnt] = head[u];
15 head[u] = cnt;
16 to[cnt] = v;
17 }
18
19 void dfs(int x) {
20 int tmp = 0;
21 if (c[x] == ')') {
22 if (top) {
23 tmp = s[top];
24 lst[x] = lst[fa[tmp]] + 1;
25 --top;
26 }
27 }
28 else if (c[x] == '(') s[++top] = x;
29 sum[x] = sum[fa[x]] + lst[x];
30 for (int i = head[x]; i; i = nxt[i]) dfs(to[i]);
31 if (tmp != 0) s[++top] = tmp;
32 else if (top) --top;
33 //回溯复原
34 }
35
36 int main() {
37 #ifdef loveGsy
38 freopen("a.in", "r", stdin);
39 freopen("a.out", "w", stdout);
40 #endif
41 scanf("%d", &n);
42 scanf("%s", c + 1);
43 for (int i = 2; i <= n; i++) {
44 int f;
45 scanf("%d", &f);
46 add(f, i);
47 fa[i] = f;
48 }
49 dfs(1);
50 for (int i = 1; i <= n; i++)
51 ans ^= sum[i] * (ll)i;
52 printf("%lld", ans);
53 return 0;
54 }

最新文章

  1. java-图片下载
  2. Android ORMapping库
  3. SQL语言和DML相关操作以及相应的运算符
  4. 【环境】VS2013和MATLAB相互调用混合编程
  5. redis 和 bloom filter
  6. 引用 struts2标签详解 - wo的的日志 - 网易博客
  7. 浅谈OGNL表达式
  8. SQL查询系列1---
  9. vue日历控件,自定义选择年月 选择年月日 选择年月日时 选择年月日时分,自定义日期范围
  10. 机器学习入门08 - 表示法 (Representation)
  11. .Net外包篇:我是怎么看待外包的(二)
  12. 洗礼灵魂,修炼python(28)--异常处理(2)—&gt;运用异常
  13. BZOJ 3771 Triple FFT+容斥原理
  14. (转)C#连接OleDBConnection数据库的操作
  15. 实现django admin后台到xadmin后台的转变
  16. gulp中pipe的作用和来源
  17. Linux命令(二十七) 用户组管理命令
  18. Maven核心简析
  19. ORACLE闪回机制分析与研究应用
  20. 【译】第七篇 SQL Server代理作业活动监视器

热门文章

  1. expect交互学习笔记
  2. 丽泽普及2022交流赛day22 无社论
  3. YII学习总结6(模板替换和“拼合”)
  4. LitJson报错记录
  5. 妙用 CSS 构建花式透视背景效果
  6. FHQ-Treap 简介
  7. linux-0.11分析:init文件 main.c的第一个初始化函数mem_int 第四篇随笔
  8. 【Harmony OS】【ArkUI】ets开发 简易视频播放器
  9. 日均 6000+ 实例,TB 级数据流量,Apache DolphinScheduler 如何做联通医疗大数据平台的“顶梁柱”?
  10. Apache 首次亚洲在线峰会: Workflow & 数据治理专场