ZR2448 题解

题意

给定一个长度为 \(n\) 的匹配的括号序列 \(s\)。给出 \(q\) 组询问,每组询问形如:光标从 \(s\) 的第 \(a\) 个字符出发,使用一下三种操作:

  1. 将光标移到左边的字符。
  2. 将光标移到右边的字符。
  3. 将光标移到匹配的括号。

求至少需要多少次操作才能移动到 \(s\) 的第 \(b\) 个字符。

\(n,q \le 4 \times 10^5\)

题解

这题在考场上想出来了,但是只剩半小时写不出来,挺可惜的。

一种很显然的暴力就是建图跑最短路。观察最短路的形式,可以发现有以下特点。

括号形成森林结构,加个虚点就是树。最短路上光标每次深度最多变化 \(1\)。再加上一些感性的理解,不难发现经过的就是 \(a\)\(b\) 对应括号间的路径上的所有括号,或者仅除去 \(\operatorname{lca}\)。这有些树形 \(\operatorname{dp}\) 的感觉。

树上每个点对应两种状态(因为括号有两边)。分别用 \(fl\)\(fr\) 存。因为有包含关系的两对括号,端点间最短路十分显然,我们可以得到转移式:

\[fl_x=\min_{y \in son_x} fl_y+v_{yl→xl},fr_y+v_{yr→xl}\\ fr_x=\min_{y \in son_x} fl_y+v_{yl→xr},fr_y+v_{yr→xr} \]

发现可以用 \(\operatorname{(min,+)}\) 矩阵优化。于是就做完了,复杂度 \(O(q \log n)\)。常数不算太大。

posted @ 2022-11-21 19:31  realFish  阅读(30)  评论(0)    收藏  举报