1 条题解

  • 0
    @ 2025-8-24 22:29:07

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar H6_6Q
    qwq

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

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

    以下是正文


    Solution\large\text{Solution}

    简单说下我的做法吧。

    对于树上的每一条链,我们可以通过维护一些信息来使得两条链之间可以合并。

    那么一个显然的思路是维护:

    1. 该链的两端都不开船的最小花费 aa

    2. 该链的下端开船,上端不开船的最小花费 bb

    3. 该链的上端开船,下端不开船的最小花费 cc

    4. 该链的两端都开船的最小花费 dd

    那么显然最简单的情况也就是只有一条边的情况,我们以此为边界。

    然后就是考虑如何合并两条链 x,yx,y 的信息,使得合并后 xx 在下 yy 在上。

    设合并完的链为 zz,那么显然有以下式子:

    az=min(ax+ay,ax+by,cx+ay,cx+byL)a_z=\min(a_x+a_y,a_x+b_y,c_x+a_y,c_x+b_y-L) bz=min(bx+ay,bx+by,dx+byL,dx+ay)b_z=\min(b_x+a_y,b_x+b_y,d_x+b_y-L,d_x+a_y) cz=min(cx+cy,cx+dyL,ax+cy,ax+dy)c_z=\min(c_x+c_y,c_x+d_y-L,a_x+c_y,a_x+d_y) dz=min(dx+dyL,dx+cy,bx+cy,bx+dy)d_z=\min(d_x+d_y-L,d_x+c_y,b_x+c_y,b_x+d_y)

    既然已经支持合并,那么可以直接倍增瞎搞了。

    当然还有很多细节要处理,不过都是一些小问题了。

    代码就不放了,写得太丑了(

    • 1

    信息

    ID
    6464
    时间
    2000ms
    内存
    400MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者