1 条题解

  • 0
    @ 2025-10-31 9:29:59

    题目大意

    给定一个连通无向图 GG,要求构造一个新图 GG',使得对于任意节点 aa 和步数 bb,从节点 11aa 是否存在长度为 bb 的路径在 GGGG' 中相同。求 GG' 的最小边数。

    核心思路

    关键观察

    1. 距离奇偶性:对于每个节点,记录到它的最短偶距离和最短奇距离
    2. 路径存在性fG(a,b)f_G(a,b) 为真当且仅当 bdis[a][bmod2]b \ge dis[a][b\bmod 2]bb 与某个可达距离同奇偶
    3. 图简化:只需要保持每个节点的两个最短距离值不变

    算法步骤

    1. BFS 计算最短距离

    void bfs() {
        // 计算每个节点的 dis[i][0] 和 dis[i][1]
        // 分别表示到节点 i 的偶数和奇数最短距离
    }
    

    2. 节点分类

    • 对于每个节点 ii,得到距离对 (d0,d1)(d_0, d_1),其中 d0d1d_0 \le d_1
    • c=(d0+d11)/2c = \lfloor (d_0 + d_1 - 1)/2 \rfloor 将节点分组

    3. 贪心构造

    对于每个 cc 值对应的节点组:

    • 维护当前可用的连接数 cnt
    • 按距离 d0d_0 从小到大处理节点
    • 尽量复用已有的连接,必要时创建新连接

    4. 特殊情况处理

    • 如果节点 11 没有奇数距离路径,直接输出 n1n-1(生成树)
    • 对于边界情况,如 d0=0d_0 = 0(节点 11 自身)特殊处理

    复杂度分析

    • 时间复杂度O(T(n+m))O(T \cdot (n + m)),其中 TT 是测试用例数
    • 空间复杂度O(n+m)O(n + m)

    总结

    本题的关键在于理解:保持图的路径存在性等价于保持每个节点的奇偶最短距离。通过巧妙的节点分组和贪心构造,可以在满足条件的前提下最小化边数。

    • 1

    信息

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