P5811 [IOI2019] 景点划分
不妨设 $a\leq b\leq c$,则此时让集合 $A,B$ 联通的限制一定是最松的。于是我们的任务就是找出两个大小分别为 $a,b$ 的连通块。
- 需要知道的一点:假设我们找到了一个大于目标大小的连通块,构造时只需要一个一个地把叶子剥掉直至大小合法就行了。
先考虑原图是树的情况。由于 $b\leq c$,故满足 $b\leq\lfloor \frac{n}{2}\rfloor$。也就是说,我们要找到最大的一条边,使得它两侧的点尽量均匀分布。考虑把重心提为根,对于所有重心的所有子树中大小最大的一颗,判断它的大小是否 $\geq a$,假若是,必定有解;否则无解。
-
证明。
有解:大小大于 $a$ 的一颗子树可以通过剥叶子得到大小得到 $A$。根据树的重心性质其余部分大小 $\geq\lfloor \frac{n}{2}\rfloor$,而 $b\leq\lfloor \frac{n}{2}\rfloor$,必定也可以通过剥叶子得到 $B$。
无解:考虑一颗子树还没法得到 $a$,要让连通块扩大,就必须包含重心,那其余的所有子树就不连通了。而 $B$ 又不可能只在一颗子树中取,所以无解。
接下来回归一般图的情况。我们任取一颗 $\text{DFS}$ 树(此时重心不一定为根结点),继续考虑重心 $u$ 的子树。我们钦定 $u$ 上方的子树为 $T$,$u$ 下方的子树为 $S_1,S_2,S_3,...,S_l$,假若 $\max(|S_1|,|S_2|,|S_3|,...,|S_l|)\geq a$,则按照前面所述的剥叶子方法求解($|S|$ 表示子树 $S$ 的结点个数)。
对于剩下的情况,继续判断:如果 $S_i$ 中与 $T$ 中有连边的子树与 $T$ 的大小和 $<a$,则必定无解。
否则,只需要逐个往 $A$ 中加入和 $T$ 相连的连通块,直到大小 $\geq a$。因为所有 $Si$ 都小于 $a$,所以剩下的连通块大小一定 $\geq n-2a\geq b$,从中剥叶子选出 $B$ 集合即可。
- 对于“ $S_i$ 中与 $T$ 中有连边的子树与 $T$ 的大小和 $<a$”必定无解的证明:为什么大小和 $<a$ 无解。考虑 $T$ 以及与它有连边的所有 $S_i$,它们靠剥叶子得到 $A$ 显然都不可能,故而必须要包含重心;而这样一来,剩余的 $S_j$ 就不连通了,再加上所有 $|S_j|<a$,故而不合法。
- 为什么 $n-2a\geq b$。根据题目条件,$n-a-c=b$,而 $a<c$,故而成立。