1 条题解

  • 0
    @ 2025-8-24 22:44:28

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar honglan0301
    AFO —— 只是我的心一直在问,用什么把你永久留下~ | 2024.07.25 — ?

    搬运于2025-08-24 22:44:28,当前版本为作者最后更新于2024-04-19 15:08:09,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    分析

    <1> 首先不管空位数量的限制,先考虑如何让操作次数最少:

    对每种颜色记录 二元组 (xi,yi){(0,0),(0,1),(1,1)}(x_i,y_i)\in\{(0,0),(0,1),(1,1)\} 表示颜色为 ii 的两辆车分别是/否位于靠近入口的一端,以及 (ui,vi)(u_i,v_i) 表示它们初始停放的车位编号。那么对 (ui,vi)(u_i,v_i) 连边建成图 GG(形成若干个环与链),分讨可以得到操作次数的理论下界:

    • (xi,yi)=(0,0)(x_i,y_i)=(0,0) 的颜色至少要进行一次操作。

    • (xi,yi)=(0,1)(x_i,y_i)=(0,1) 的颜色,如果两辆该颜色的车已经配对则不用操作,否则至少进行一次操作。

      *特别地,当一个连通块中全是 (xi,yi)=(0,1)(x_i,y_i)=(0,1) 的颜色时,至少要多进行一次操作。因为连通块中第一个被操作的颜色不能立即完成配对。

    • (xi,yi)=(1,1)(x_i,y_i)=(1,1) 的颜色至少要进行两次操作。因为车位是栈形的,我们无法在其中一辆车不动的情况下停放另一辆车。

    再尝试构造方案:

    • 首先把 (xi,yi)=(1,1)(x_i,y_i)=(1,1) 的颜色都换到初始局面的空位上。

    • 此时图 GG 里每条链中的 (xi,yi)(x_i,y_i) 一定依次形如 (1,0),(1,0),,(1,0),(0,0)(1,0),(1,0),\dots,(1,0),(0,0),从前往后依次删即可;每个环中 (xi,yi)(x_i,y_i) 一定只有 (1,0)(1,0),任选一个 11 换到空位处后,环变为链,用删链的方法即可。

    • 因此能够找出操作次数达到理论下界的方案,sub2 得到了解决。

    <2> 考虑在以上过程中,如何使得同一时刻占用车位数最少:

    同样先分析下界,按照图 GG 各连通块的形态/状态分讨:

    • 对于一条链。操作时,如果其中仅有 (xi,yi)=(1,0)/(0,0)(x_i,y_i)=(1,0)/(0,0) 的点,则对其操作时不需占用额外空位;否则至少要占用一个空位。操作后,空位数量增加 11(原先两端车位各只停一辆车)。

    • 对于一个环。操作时,假如其中均有 (xi,yi)=(1,0)(x_i,y_i)=(1,0) 或只有一个 (xi,yi)=(1,1)(x_i,y_i)=(1,1),则至少占用一个空位;否则至少占用两个空位(因为对其进行任何操作后均会变成含有 (1,1)(1,1) 的链)。操作后,空位数量保持不变。

    再构造/判无解:

    • 首先操作不需额外空位的链。

    • 此时若没有空位但仍需操作 则无解。

    • 然后操作需要占 11 个空位的链(因为能够提供新空位)。

      *具体地,我们从链头开始,每当碰到 (xi,yi)=(1,1)(x_i,y_i)=(1,1) 的颜色就将其换到空位处,并将其前面不含 (1,1)(1,1) 的链复原即可,占用空位数达到理论下界。

    • 此时若空位数量为 11 但存在需占用两个空位的环 则无解。

    • 否则对环依次操作,即可在操作次数最少的前提下完成任务。

      *具体地,先把环上一个 (xi,yi)=(1,1)(x_i,y_i)=(1,1) 的颜色(如果没有就选 (0,1)(0,1) 的颜色) 换到空位处,之后即可按照链的方法操作,占用空位数能够达到理论下界。


    综上,做完了。简单维护即可做到线性。

    代码

    丑陋的 赛时代码。

    • 1

    信息

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