1 条题解

  • 0
    @ 2025-8-24 22:52:22

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Sampson_YW
    你弱归你弱,YW比你弱。

    搬运于2025-08-24 22:52:22,当前版本为作者最后更新于2023-11-30 09:56:38,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    不好意思,我应该声明一下这个做法不是正解的(我不会证明/证伪复杂度)。看见有人被误导了。。

    枚举直径端点 (x,y)(x,y),将 xyx\to y 这条路径提取出来做区间 DP。

    具体地,设 ft,l,rf_{t,l,r} 表示用了 aa 序列用了前 tt 个数,区间 [l,r][l,r] 中的边已经填好了。那么这个区间的子树里的所有点都可以用来放垃圾。

    sl,rs_{l,r} 表示区间 [l,r][l,r] 去掉枚举的直径上的点后的大小,那么当 sl,r>t(rl)s_{l,r}>t-(r-l)ft,l,rf_{t,l,r} 可以转移到 ft+1,l,rf_{t+1,l,r}

    还有两种转移是 ft,l,r+at+1ft+1,l1,rf_{t,l,r}+a_{t+1}\to f_{t+1,l-1,r}ft,l,r+at+1ft+1,l,r+1f_{t,l,r}+a_{t+1}\to f_{t+1,l,r+1},表示区间向左/向右扩展。

    这样是 O(n5)O(n^5) 的,但是注意到直径端点只需要枚举叶子,再对 ss 数组相同的记忆化一下就可以过了。

    code

    • 1

    信息

    ID
    9362
    时间
    4000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者