1 条题解

  • 0
    @ 2026-8-22 21:17:16

    Modulo Shortest Path 题解

    思路

    原图有 Θ(N2)\Theta(N^2) 条边,不能直接建图。边权 (Ai+Bj)modM(A_i+B_j)\bmod M 可看成在模 MM 环上从 (Ai)modM(-A_i)\bmod M 顺时针走到 BjB_j 的距离。因此只需保留所有这两类关键坐标。

    做法

    25 分

    若所有 Ai+Bj<MA_i+B_j<M,任意路径 1=v0,v1,,vk=N1=v_0,v_1,\ldots,v_k=N 的权值可重排为

    A1+BN+r=1k1(Avr+Bvr).A_1+B_N+\sum_{r=1}^{k-1}(A_{v_r}+B_{v_r}).

    后一部分非负,所以直达边必然最优,答案为 A1+BNA_1+B_N

    累计 60 分

    N2000N\le2000 时,在不存储边的情况下运行稠密 Dijkstra。每轮线性选取距离最小的未确定顶点,再枚举所有终点并现算模边权,复杂度为 O(N2)O(N^2)

    100 分

    收集所有 (MAi)modM(M-A_i)\bmod MBiB_i,排序去重后得到关键坐标环。建立原顶点与坐标顶点:

    • 从原顶点 ii 向坐标 (MAi)modM(M-A_i)\bmod M 连零边;
    • 从坐标 BiB_i 向原顶点 ii 连零边;
    • 每个坐标向环上下一个坐标连边,权值为顺时针模差。

    ii 经其入口坐标走到 BjB_j、再经零边进入 jj,代价恰为 (Ai+Bj)modM(A_i+B_j)\bmod M。反向也可将辅助图中相邻两个原顶点之间的片段还原成原图边;回到同一原顶点的闭游走非负,删除不会变差。因此两图最短路相等。

    对至多 3N3N 量级的点和 O(N)O(N) 条边运行堆优化 Dijkstra。必须保留最大坐标到最小坐标的跨环边,并用 64 位整数表示距离和环差。

    正确性证明

    每条原图边都有一条同权的辅助图路径,因此辅助图最短距离不大于原图。任意辅助图路径在相邻原顶点间又恰好对应一条同权原图边,非负闭游走可删,所以原图最短距离也不大于辅助图。两者相等,Dijkstra 给出正确答案。

    复杂度

    满分算法时间复杂度为 O(NlogN)O(N\log N),空间复杂度为 O(N)O(N)

    • 1

    信息

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