1 条题解

  • 0
    @ 2025-8-24 22:50:32

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar sunkuangzheng
    **

    搬运于2025-08-24 22:50:32,当前版本为作者最后更新于2024-04-09 08:24:17,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    P9664\textbf{P9664}

    • 给定 nn 个字符串 s1,s2,,sns_1,s_2,\ldots,s_n,构造 nn 个点的无向完全图 GG,边 i,ji,j 的边权是 LCS(si,sj)\operatorname{LCS}(s_i,s_j),其中 LCS\operatorname{LCS} 指最长公共子串
    • GG 的最大生成树边权和。
    • 1n,si21061 \le n,\sum |s_i| \le 2 \cdot 10^6

    后缀数组做这题应该是最简单的吧。

    回忆一下我们是怎么用 SA 求两串 LCS\operatorname{LCS} 的,我们是直接拼起来,然后枚举 rkrk 相邻的归属串不同的两个后缀计算 LCP\operatorname{LCP} 后取 max\max

    把所有 sis_i 拼起来用不同的分隔符隔开,我们有结论有用的边只有 (sai,sai+1)(sa_i,sa_{i+1})O(si)\mathcal O(\sum |s_i|) 条。考虑一条边 (sai,sai+k)  (k2)(sa_i,sa_{i+k}) \; (k \ge 2),其边权等于 (sai,sai+1),,(sai+k1,sai+k)(sa_i,sa_{i+1}),\ldots,(sa_{i+k-1},sa_{i+k}) 边权的最小值,我们在 Kruskal 合并的过程中一定会先把中间的边都考虑完,而此时 sai,sai+ksa_i,sa_{i+k} 必然已经连通,因此 (sai,sai+k)(sa_i,sa_{i+k}) 这条边没有用。

    m=sim = \sum |s_i|,时间复杂度 O(mlogm)\mathcal O(m \log m)

    • 1

    信息

    ID
    9240
    时间
    5000ms
    内存
    1024MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者