有一颗深度为 D 的满 K 叉树,你需要剪掉一些边使其存在大小为 X 的联通分量,求最少剪掉的边的条数。
分析
考虑选择 所有 大小大于等于 X 的一颗深度为 d 的满 K 叉树,在剪掉后大小仍超过 X 的情况下剪掉所有与根直接相连的边,也就是剪掉若干个深度为 d−1 的满 K 叉树,再递归处理深度 d−1 的满 K 叉树。注意如果 d=D,在树根与树根父节点的连边也要剪掉。
感性理解一下,考虑为什么是对的。在原树上的任意一个子树都可以看成一棵树,树的根节点往上有一条链。先不考虑链,原问题变成了有一颗满 K 叉树,剪掉一些边使得 包含根节点 的联通分量大小为 x,求剪掉的边的最少条数。这个问题贪心地剪若干个最大的子树再递归下去显然是对的。上面的做发选择所有大小大于等于 X 的子树就实现了枚举链的长度,所以原贪心也是对的。