1 条题解

  • 0
    @ 2026-8-28 1:36:09

    题解

    思路

    正向删除会使最短路失效,难以维护;反向看成按 xn,xn−1,…,x1x_n,x_{n-1},\ldots,x_1 加入顶点。加入顶点 kk 后,它是唯一新增的可用中转点,因此一次 Floyd 松弛即可更新全部点对距离。

    做法

    初始距离为邻接矩阵。逆序枚举删除排列中的顶点 kk,执行

    dij←min⁡(dij,dik+dkj)d_{ij}\leftarrow\min(d_{ij},d_{ik}+d_{kj})

    (对所有 i,ji,j)。然后只对已经加入的顶点集合求 dijd_{ij} 之和,记录到对应的正向步骤。

    正确性证明

    归纳假设加入 kk 前,dijd_{ij} 是只经过此前已加入顶点的最短路。加入 kk 后,任意新出现的更短简单路径经过 kk 至多一次,可拆成一条旧集合内从 ii 到 kk 的最短路和一条从 kk 到 jj 的最短路,因此 Floyd 转移恰好覆盖全部新最短路。归纳成立。每轮只累加当前已加入集合,正好对应正向删除该顶点之前的图,故所有输出正确。

    复杂度分析

    时间复杂度 O(n3)O(n^3),空间复杂度 O(n2)O(n^2)。

    • 1

    信息

    ID
    1134
    时间
    3000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者