1 条题解

  • 0
    @ 2026-4-18 14:31:41

    C. 树的切割 详细题解

    题目核心理解

    给定一棵 nn 个结点的树,需要恰好删除 kk 条边,使整棵树分成 k+1k+1 个连通块。 求最大的 xx,使得每个连通块的大小都不小于 xx


    核心思路

    1. 关键性质

    • 答案具有单调性:若 xx 可行,则所有小于等于 xx 的值都一定可行。
    • 因此可以对答案 xx 进行二分查找
    • 以任意结点为根进行贪心切割,最终能切出的合法块数量相同。

    2. 判定规则

    对给定的 xx,用 DFS 后序遍历统计子树大小:

    • 若某棵子树结点数 x\ge x,则立即切断该子树与其父结点的边。
    • 统计最多能切出多少个大小 x\ge x 的连通块。
    • 若块数 k+1\ge k+1,则 xx 可行,否则不可行。

    算法流程

    1. 二分答案范围:左端点 l=1l=1,右端点 r=nk+1r=\dfrac{n}{k+1}
    2. 对当前二分值 midmid,用 DFS 贪心计算最多可切分的块数。
    3. 若块数足够,记录答案并尝试更大值;否则尝试更小值。
    4. 二分结束后输出最大可行 xx

    公式与复杂度分析

    判定条件:

    可切分块数k+1    x 可行\text{可切分块数} \ge k+1 \iff x \text{ 可行}

    复杂度

    • 二分次数:O(logn)O(\log n)
    • 单次判定 DFS:O(n)O(n)
    • 总时间复杂度:O(nlogn)O(n \log n)

    可轻松处理 n105n \le 10^5、多组数据 n105\sum n \le 10^5 的范围。

    • 1

    信息

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