do_while_true

一言(ヒトコト)

「题解」洛谷 P4665 [BalticOI 2015]Network

以任意非叶节点为根求 dfs 树,设叶子节点为 \(k\),答案的下界是 \(\left\lceil\frac{k}{2}\right\rceil\),现在给出一组构造方案证明这个下界可以达到。

把叶子节点按照 dfn 排序,然后第 \(i\) 个叶子连向第 \(i+k/2\) 个叶子。

如果每条边都在一个环里,那么这个图没有割边,如果根节点的子树包含的叶子节点都 \(<k/2\),那么每个叶子都能和另外一个子树的叶子匹配,显然每条边都会被覆盖到。

如果存在一个子树 \(>k/2\),那么没有和子树外的点匹配的只有这个子树内的叶子,单独考虑这棵子树,一定是前若干个叶子和后若干个叶子匹配,如果它们不在这个子树的一棵子树内,就合法了,否则还会存在一个更下一层的子树,前若干个叶子和后若干个叶子匹配。如此递归下去,到了最底层的时候显然合法。

所以整个构造方案是合法的。

posted @ 2021-09-24 18:51  do_while_true  阅读(32)  评论(0编辑  收藏  举报