1 条题解

  • 0
    @ 2025-8-24 23:11:01

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar MrPython
    waac_tXKCMem1dAph0gg0

    搬运于2025-08-24 23:11:01,当前版本为作者最后更新于2025-08-07 21:04:07,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    做个题给我气笑了,难点在于读题。

    考虑字符串的所有 ss 所有前缀所构成的集合 ps={s1:i0is}p_s = \{s_{1:i} | 0 \leq i \leq \left|s\right| \}。由于 border(t)\operatorname{border}(t)tt 的前缀,显然有 tsborder(t)st \in s \Rightarrow \operatorname{border}(t)\in s。将 ss 中的每个元素视为图上的点,并对于所有满足 tstεt \in s \wedge t \neq \varepsilon 的字符串 tt 在图上添加边 tborder(t)t \leftrightarrow \operatorname{border}(t),则整张图会构成一颗以 ε\varepsilon 为根的树。

    ss 的前缀 xx 生成的前缀集合 uu 也要求 tsborder(t)st \in s \Rightarrow \operatorname{border}(t)\in s,则 uu 显然是 ss 的子集,用刚才的方式生成的图即为树上 xx 到跟 ε\varepsilon 的链。g(x,y)g(x,y) 则是图上 xxyy 的 LCA。因此,最后合并后的集合是树上 xxyy 路径上的点所构成的集合。

    然后你发现这其实是点分治板子,然后就做完了。

    • 1

    信息

    ID
    11469
    时间
    1000ms
    内存
    512MiB
    难度
    5
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者