拴茅劾 发表于 2025-11-22 21:45:02

洛谷 P5658 [CSP-S 2019] 括号树 题解

题目大意

给定一棵树,每个节点有一个括号。对于每个节点 \(i\),定义 \(s_i\) 为从根节点到 \(i\) 的路径上所有括号按顺序组成的字符串。求每个 \(s_i\) 中互不相同的合法括号子串的个数 \(k_i\)。
思路

首先,\(k_i\) 可以从父节点递推得到,\(k_i=k_{f_i}+a_i\)。其中 \(a_i\) 为以节点 \(i\) 结尾的合法括号序列数量。因此只要求出每个节点的 \(a\)。
以 ( 为 \(1\) ) 为 \(−1\) 做树上前缀和,设点 \(u\)
的前缀和为 \(sum_u\)。则以 \(u\) 结尾的合法括号子串的开头 \(v\) 需要满足:

[*]\(sum_{f_v}=sum_u\)。
[*]对于 \(v\to u\) 这条链上的所有点 \(x\),有 \(sum_x\ge sum_u\)。

在 DFS 过程中开一棵值域线段树维护 \(1\to u\) 这条链上每个 \(sum\) 值对应的最大节点深度。这样就能找到 \(sum_p

梦霉 发表于 2025-12-16 23:36:14

感谢分享

威割 发表于 2026-1-13 01:31:14

热心回复!

后沛若 发表于 2026-1-15 17:30:07

用心讨论,共获提升!

庇床铍 发表于 2026-1-18 04:35:42

新版吗?好像是停更了吧。

泡市 发表于 2026-1-21 08:00:07

分享、互助 让互联网精神温暖你我

辜酗徇 发表于 2026-1-21 20:43:38

很好很强大我过来先占个楼 待编辑

驳嗦 发表于 2026-1-22 11:52:26

喜欢鼓捣这些软件,现在用得少,谢谢分享!

厂潺 发表于 2026-1-24 10:20:49

很好很强大我过来先占个楼 待编辑

涅牵 发表于 2026-1-25 11:12:01

感谢分享,下载保存了,貌似很强大

酒跚骼 发表于 2026-1-26 07:02:00

不错,里面软件多更新就更好了

玻倌瞽 发表于 2026-1-28 03:02:31

过来提前占个楼

荪俗 发表于 2026-1-28 04:07:29

懂技术并乐意极积无私分享的人越来越少。珍惜

事值 发表于 2026-1-30 07:40:03

这个好,看起来很实用

庇床铍 发表于 2026-2-8 12:49:59

谢谢分享,试用一下

喳谍 发表于 2026-2-9 02:43:53

东西不错很实用谢谢分享

喳谍 发表于 2026-2-9 17:35:19

谢谢分享,试用一下

羡渥蛛 发表于 2026-2-9 21:55:05

yyds。多谢分享

晖顶蝇 发表于 2026-2-10 00:54:18

感谢发布原创作品,程序园因你更精彩

貊淀 发表于 2026-2-12 02:17:21

谢谢分享,试用一下
页: [1] 2
查看完整版本: 洛谷 P5658 [CSP-S 2019] 括号树 题解