1 条题解

  • 0
    @ 2025-8-24 22:49:16

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar liangbowen
    不能再摆了,,,

    搬运于2025-08-24 22:49:15,当前版本为作者最后更新于2024-07-20 12:08:21,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    blog。提供一份代码短的题解。


    一个暴力做法:维护 wi<wnoww_i<w_{now}wiwnoww_i\ge w_{now} 的前后缀 MST,查 XiX_i 时将前后缀 MST 合并,直接求得答案。

    考虑一棵 (unow,vnow,W)(u_{now},v_{now},W) 的前缀 MST。因为 wi<Ww_i<Wwiw_i 越大 Wwi|W-w_i| 越小,所以枚举所有 wi<Ww_i<W,按边权从大到小加边:

    • 先忽略掉 (unow,vnow)(u_{now},v_{now}) 的边。
    • 对于其他 wi<Ww_i<W,尝试加入。如果成功加入并且构成了包含 (unow,vnow)(u_{now},v_{now}) 的环,显然需要删除最大边,加入最小边。显然最大边就是 wiw_i,最小边就是 wnoww_{now},删掉 ii 并加入 nownow

    找到这个 ii。那么 wnoww_{now} 对答案有贡献,当且仅当询问的 XXXwi>wnowXX-w_i> w_{now}-X,即 X>wi+wnow2X>\dfrac{w_i+w_{now}}2

    同理,wiw_iX>wi+wnow2X>\dfrac{w_i+w_{now}}2 时会结束贡献。那么每条边都会有一个贡献区间,可以加入 MST 当且仅当在贡献区间内


    用并查集模拟上述算法,找出贡献区间 [li,ri][l_i,r_i],那么对于不同的 XX,边 ii 的贡献为:

    • X<liX<l_i,没有贡献。
    • liX<wil_i\le X<w_i,贡献为 Xwi=wiX|X-w_i|=w_i-X
    • wiX<riw_i\le X<r_i,贡献为 Xwi=Xwi|X-w_i|=X-w_i
    • XriX\ge r_i,没有贡献。

    写个指针状物,因为询问的 XiX_i 有序,顺着扫一遍即可。可以看代码理解。


    code,时间复杂度 O(nm+qlogm)O(nm+q\log m)

    写了 1.5k,其实应该可以写进 1k 的(

    • 1

    信息

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