找回密码
 立即注册
首页 业界区 业界 洛谷 P5658 [CSP-S 2019] 括号树 题解

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

拴茅劾 2025-11-22 21:45:02
题目大意

给定一棵树,每个节点有一个括号。对于每个节点 \(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

相关推荐

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 04:07:29

举报

懂技术并乐意极积无私分享的人越来越少。珍惜
2026-1-30 07:40:03

举报

2026-2-10 00:54:18

举报

感谢发布原创作品,程序园因你更精彩
2026-2-12 02:17:21

举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册