P5658 [CSP-S2019] 括号树
2024-10-20 16:18:42
对于特殊性质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 }
最新文章
- java-图片下载
- Android ORMapping库
- SQL语言和DML相关操作以及相应的运算符
- 【环境】VS2013和MATLAB相互调用混合编程
- redis 和 bloom filter
- 引用 struts2标签详解 - wo的的日志 - 网易博客
- 浅谈OGNL表达式
- SQL查询系列1---
- vue日历控件,自定义选择年月 选择年月日 选择年月日时 选择年月日时分,自定义日期范围
- 机器学习入门08 - 表示法 (Representation)
- .Net外包篇:我是怎么看待外包的(二)
- 洗礼灵魂,修炼python(28)--异常处理(2)—>;运用异常
- BZOJ 3771 Triple FFT+容斥原理
- (转)C#连接OleDBConnection数据库的操作
- 实现django admin后台到xadmin后台的转变
- gulp中pipe的作用和来源
- Linux命令(二十七) 用户组管理命令
- Maven核心简析
- ORACLE闪回机制分析与研究应用
- 【译】第七篇 SQL Server代理作业活动监视器
热门文章
- expect交互学习笔记
- 丽泽普及2022交流赛day22 无社论
- YII学习总结6(模板替换和“拼合”)
- LitJson报错记录
- 妙用 CSS 构建花式透视背景效果
- FHQ-Treap 简介
- linux-0.11分析:init文件 main.c的第一个初始化函数mem_int 第四篇随笔
- 【Harmony OS】【ArkUI】ets开发 简易视频播放器
- 日均 6000+ 实例,TB 级数据流量,Apache DolphinScheduler 如何做联通医疗大数据平台的“顶梁柱”?
- Apache 首次亚洲在线峰会: Workflow & 数据治理专场