1 条题解

  • 2
    @ 2026-3-31 10:32:44

    容易发现老鼠一旦向下走,后面的操作是完全固定的(可预处理的)。

    关键矛盾在于老鼠向上走的过程中管理员可以留后手滞后操作(攒着不用但是关键时刻阴他一手,这是基于两者都足够聪明这一条件)。

    这个条件太难刻画了,不知道管理员的后(大)手会怎么删边。

    某人似乎想到了用背包分配但是很快发现是 O(n3)O(n^3) 的。

    于是考虑解决问题->判定问题。

    管理员能否p次操作达成,可以二分。

    我们认为操作分为两种:

    • 固定操作:当老鼠决定从某一点往下跳,之后的操作数是固定的,也就是先封死,再删掉从这里到根的所有岔路,再擦除。具体的:维护 fxf_x 表示从 xx 节点的父亲走到这个节点,最少需要多少操作才能把老鼠逼回 xx.(封死),再维护 g[x]g[x] 表示上面需要砍多少个分叉,最后根据是否是根决定是否还有一步擦除(从fatherx>xfather_x->x 的气味)。
    • 动态可滞后操作:解决这个问题的关键,在老鼠向上跳的时候积累的操作机会,用于封死某一步老鼠试图取得的更优解。

    每次向上跳一步意味着管理员积累了一次可以滞后的操作。

    如果当前跳到的节点的某一个儿子的固定操作数大于 check 的 p,就消耗 q 积攒的操作封死这个儿子,再向上跳。如果某次不够封了返回 false。

    • 1

    信息

    ID
    678
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    6
    已通过
    1
    上传者