1 条题解

  • 0
    @ 2025-10-15 14:40:02

    题目大意

    给定一个无向图,每条边有颜色 CiC_i 和改色花费 PiP_i。机器人从节点 11 出发,每次你指定一个颜色,如果从当前节点出发恰好只有一条边是该颜色,机器人就会走那条边,否则停止。可以通过花费 PiP_i 改变边的颜色。求从节点 11 到节点 NN 的最小总花费,若无法到达输出 1-1

    解题思路

    核心观察

    在节点 uu,如果我们想用颜色 cc 作为指令,那么 uu 的所有出边中颜色为 cc 的边必须恰好只有一条

    对于某条边 ee,如果我们想把它作为颜色 cc 的唯一出边:

    • 如果 ee 原本颜色不是 cc,需要花费 PeP_e 改色
    • uu 的其他颜色为 cc 的出边都必须改色(总花费为这些边的 PiP_i 之和)

    建图技巧

    直接枚举所有 (节点,颜色)(节点, 颜色) 状态会超时,需要优化:

    1. 对每个节点的出边按颜色分组
    2. 虚拟节点技术
      • 对于节点 uu 的每种颜色 cc,如果该颜色有 kk 条边,就创建一个虚拟节点
      • uu 连接到虚拟节点,边权为 00
      • 从虚拟节点连接到每条颜色为 cc 的边的终点,边权为 总花费 - 该边花费
      • 这样选择任意一条颜色为 cc 的边时,代价就是 总花费 - 该边花费 + 该边改色花费

    算法流程

    1. 读入图数据,建立初始邻接表
    2. 对每个节点 uu
      • 统计每种颜色的总花费和边数
      • 如果某种颜色只有一条边,直接使用该边(可能花费 00PeP_e
      • 如果某种颜色有多条边,创建虚拟节点并连接
    3. 在扩展图上跑 Dijkstra 最短路
    4. 输出 dis[N]dis[N]1-1

    复杂度分析

    • 时间复杂度O((N+M)log(N+M))O((N+M)\log(N+M)),其中虚拟节点最多 MM
    • 空间复杂度O(N+M)O(N+M)

    总结

    本题的关键在于将颜色约束转化为图论问题,通过虚拟节点技术避免状态爆炸,最终用最短路算法求解。

    • 1

    信息

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