1 条题解

  • 0
    @ 2025-8-24 22:37:45

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar KaguyaH
    嘛。

    搬运于2025-08-24 22:37:45,当前版本为作者最后更新于2022-04-19 21:57:35,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    Problem Statement

    给定 nn 个点的二叉树,点有权值 d1nd_{1 \dots n}。需要依次删除所有边。删边代价为两端点权值和;删边前会交换两端点权值。求最小总代价。

    Constraints

    1n5×103,1di1091 \le n \le 5 \times 10^3, 1 \le d_i \le 10^9


    Solution

    Changelog: 修正了部分笔误,提供了避免斜率优化的做法。

    SrS_r 表示以 rr 为根的子树。认为点权是在树上移动的。

    fu,vf_{u, v} 表示 Slca(u,v)S_{\operatorname{lca}(u, v)} 中,将 dud_u 移出,移入的点权最终停留在 vv,删去子树中所有边以及 lca(u,v)\operatorname{lca}(u, v) 入边的最小总代价(不包括换入的点权)。

    r=lca(u,v)r = \operatorname{lca}(u, v) 自下而上的顺序转移。下文中「朴素转移」意为枚举所有合法转移。下文 dd 可能表示节点,但不会造成歧义,请注意区分。由于公式较多,有可能出现笔误。

    • degr=0\deg r = 0fr,r=drf_{r, r} = d_r

    • degr=1\deg r = 1

      • ddrr 的孩子。
      • u=ru = r:$f_{u, v} = \min \lbrace d_u + f_{w, v} \rbrace \pod { \operatorname{lca}(v, w) = d }$。枚举 v,wv, w,总时间复杂度 O(n2)O(n^2)
      • v=rv = r:$f_{u, v} = \min \lbrace f_{u, w} + d_u + d_v(\operatorname{dep}_w - \operatorname{dep}_v) \rbrace \pod {\operatorname{lca}(u, w) = d}$。枚举 u,wu, w,总时间复杂度 O(n2)O(n^2)
    • degr=2\deg r = 2

      • u=ru = r

        ddrrvv 一侧的孩子,dd' 为另一侧的孩子。易知:应先删掉 rr 的入边;再删掉 rdr \to d 的边;再删掉 rdr \to d' 的边。

        枚举 ww 使得 dwd_wSdS_d 移至 SdS_{d'};枚举 xxSdS_{d'} 移至 rr;枚举 dwd_w 移至的点 yy;则有:

        $$\begin{aligned} f_{u, v} &= \min_{w, x, y} \lbrace d_u + f_{w, v} + f_{x, y} + d_w({\operatorname{dep}}_y - {\operatorname{dep}}_u) \rbrace \cr &= d_u + \min_{y} \lbrace \min_x f_{x, y} + \min_w \lbrace ({\operatorname{dep}}_y - {\operatorname{dep}}_u) \cdot d_w + f_{w, v} \rbrace \rbrace \cr &= d_u + \min_w \lbrace f_{w, v} + \min_y \lbrace (\operatorname{dep}_y - \operatorname{dep}_u) \cdot d_w + \min_x f_{x, y} \rbrace \rbrace \end{aligned} \pod{ \operatorname{lca}(v, w) = d, \operatorname{lca}(x, y) = d'} $$

        按照第二行的式子,发现 vv 确定时第二层大括号内部形如一个关于 depydepu\operatorname{dep}_y - \operatorname{dep}_u 的一次函数。可以斜率优化。枚举 ww 预处理;枚举 yy 转移;总时间复杂度 O(n2)O(n^2)

        此外,若按照第三行的式子,发现第三层 min\min 仅与 yy 有关,第二层 min\min 仅与 ww 有关;可以枚举 y,xy, x 预处理每个 yy 对应的第三层的值,枚举 w,yw, y 预处理每个 ww 对应的第二层的值,枚举 v,wv, w 进行转移,即可避免斜率优化。总时间复杂度 O(n2)O(n^2)

      • v=rv = r

        ddrruu 一侧的孩子,dd' 为另一侧的孩子。易知:应先删掉 rdr \to d' 的边;再删掉 rdr \to d 的边;再删掉 rr 的入边。

        枚举 ww 使得 dwd_wSdS_{d'} 移至 SdS_d;枚举 drd_r 移至的点 xx;枚举 dwd_w 移至的点 yy;则有:

        $$\begin{aligned} f_{u, v} &= \min_{w, x, y} \lbrace f_{w, x} + d_v(\operatorname{dep}_x - \operatorname{dep}_v) + f_{u, y} + d_w(\operatorname{dep}_y - \operatorname{dep}_v) + d_u \rbrace\cr &= d_u + \min_y \lbrace f_{u, y} + \min_w \lbrace d_w (\operatorname{dep}_y - \operatorname{dep}_v) + \min_x \lbrace f_{w, x} + d_v (\operatorname{dep}_x - \operatorname{dep}_v) \rbrace \rbrace \rbrace \end{aligned} \pod{\operatorname{lca}(w, x) = d', \operatorname{lca}(u, y) = d} $$

        发现第二层 min\minuu 无关,第三层 min\minyy 无关。枚举 w,xw, x 预处理;枚举 y,wy, w 预处理;枚举 u,yu, y 转移;总时间复杂度 O(n2)O(n^2)

      • ur,vru \ne r, v \ne r

        ddrruu 一侧的孩子,dd'rrvv 一侧的孩子。易知:应先删掉 rdr \to d 的边;再删掉 rr 的入边;再删掉 rdr \to d' 的边。

        枚举 drd_r 移至的点 ww;枚举 xx 使得 dxd_xSdS_{d'} 移至 rr;则有:

        $$f_{u, v} = \min_{w, x} \lbrace f_{u, w} + d_r (\operatorname{dep}_w - \operatorname{dep}_r) + d_u + f_{x, v} \rbrace \pod{ \operatorname{lca}(u, w) = d, \operatorname{lca}(v, x) = d' } $$

        枚举 u,wu, w 预处理;枚举 u,vu, v 转移;总时间复杂度 O(n2)O(n^2)

    时空复杂度 O(n2)O(n^2)

    • 1

    信息

    ID
    7639
    时间
    1000ms
    内存
    2048MiB
    难度
    7
    标签
    递交数
    0
    已通过
    0
    上传者