1 条题解

  • 0
    @ 2025-10-23 9:58:45

    题目分析

    这是一个图论+并查集问题,要求删除最少的边,使得编号 k\leq k 的点不在任何简单环上。

    算法思路

    核心思想

    使用并查集维护连通性,分两阶段处理边:

    1. 第一阶段:连接两个端点都 >k> k 的边(这些边安全,不会让关键点形成环)
    2. 第二阶段:处理涉及关键点的边,如果连接会形成环就删除

    代码逻辑分析

    int main() {
        // 初始化并查集
        for (int i = 1; i <= n; i++)
            fa[i] = i;
    
        // 第一阶段:连接两个端点都 > k 的边
        for (int i = 1; i <= m; i++) {
            int u = read(), v = read();
            e[i][0] = u, e[i][1] = v;
            
            if (u > k && v > k)
                merge(u, v);  // 安全边,直接连接
        }
    
        // 第二阶段:处理涉及关键点的边
        for (int i = 1; i <= m; i++) {
            int u = e[i][0], v = e[i][1];
            
            if (u > k && v > k)  // 已处理过,跳过
                continue;
                
            int x = find(u), y = find(v);
            
            if (x == y)  // 会形成环,删除这条边
                ans++, vt.push_back(i);
            else         // 不会形成环,连接
                fa[x] = y;
        }
    }
    

    正确性证明

    为什么这个策略能得到最优解?

    1. 安全性:两个端点都 >k> k 的边不会让关键点形成环,所以优先连接
    2. 最小性:只有当连接会形成环时才删除边,保证了删除边数最少
    3. 可行性:删除这些边后,关键点确实不在任何环上

    样例验证

    输入:

    11 13 5
    1 2
    1 3
    1 5
    3 5
    2 8
    4 11
    7 11
    6 10
    6 9
    2 3
    8 9
    5 9
    9 10
    

    处理过程:

    第一阶段:连接边 (6,10),(6,9),(8,9),(9,10)(6,10), (6,9), (8,9), (9,10)(端点都 >5>5

    第二阶段

    • (1,2)(1,2) ✓ 连接
    • (1,3)(1,3) ✓ 连接
    • (1,5)(1,5) ✓ 连接
    • (3,5)(3,5) ✗ 形成环 13511-3-5-1 → 删除
    • (2,8)(2,8) ✓ 连接
    • (4,11)(4,11) ✓ 连接
    • (7,11)(7,11) ✓ 连接
    • (2,3)(2,3) ✗ 形成环 12311-2-3-1 → 删除
    • (5,9)(5,9) ✗ 形成环 → 删除

    输出:

    3
    2 3
    5 9
    3 5
    

    复杂度分析

    • 时间复杂度O(mα(n))O(m \alpha(n))

      • α(n)\alpha(n) 是反阿克曼函数,近似常数
      • mm 条边进行并查集操作
    • 空间复杂度O(n+m)O(n + m)

      • 存储并查集和边列表

    关键优化点

    1. 两阶段处理:先处理安全边,减少后续判断的复杂度
    2. 避免重复:第二阶段跳过已处理的安全边
    3. 输出格式:保证输出时小编号在前

    适用场景

    这种方法适用于:

    • 大规模图数据(n106,m2×106n \leq 10^6, m \leq 2\times 10^6
    • 需要快速判断环的存在性
    • 要求最小化删除边数

    总结

    该解法通过巧妙的分阶段并查集策略,高效地解决了关键点去环问题,既保证了正确性,又具有优秀的时空复杂度。

    • 1

    信息

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