「CodeForces-504E」Misha and LCP on Tree
给定一棵 n 个节点的树,每个节点有一个小写字母。
每次询问为树上 a -> b 和 c -> d 的路径组成的字符串的最长公共前缀长度
谁能想到!我还有会写树剖的一天
题意
给定一棵$n$个节点的树,每个节点有一个小写字母。
有$m$组询问,每组询问为树上$ a \to b$ 和$ c \to d$组成的字符串的最长公共前缀长度。
$n \le 3 \times 10^5,m \le 10^6$。
题解
对于每个询问,可以把查询的链看作是$O(logn)$个区间拼接起来,对于区间从前往后依次查询lcp即可。
处理出树剖后的串做lcp查询,哈希/SA/SAM都可以。
SA就根据树剖的dfn建串,正反拼接一下(分别对应路径从根到叶子和从叶子到根的情况),对每个询问找到dfn的pos处理查询即可。
代码
1 |
|