P5811-IOI-2019-景点划分
题意
给出一个无向图,构造把点分到 \(3\) 集合里,满足大小分别为 \(a,b,c\),使得存在两个集合的其中任意两点可以只经过这两个集合的点连通。或报告无解。
思路
考虑存在两个集合,我们发现只要是最小的两个集合能够满足条件就行了,那么我们先按照大小排序,满足 \(a\le b\le c\)。这样我们只关心 \(a,b\)。
对于构造题先考虑最简单的情况,考虑一棵树,如果我们选择一个点定为根,然后最好它的子树里存在一个 \(\ge a\) 的,这样因为 \(a\le b\),所以 \(a\le \frac{n}{2}\),那么 \(b\) 也一定可以放进去。
子树大小是一半?这提醒了我们可以直接选择树的重心然后判断是否满足上面的条件即可。
对于一个图很复杂,我们可以先只考虑它的 dfs 树。如果满足了上述条件那么就做完了。现在考虑对于一个重心,如果它所有的子树大小全部 \(<a\) 怎么办。我们考虑先从重心在 dfs 树上的父亲开始遍历,因为无向图不存在横叉边,所以如果有返祖边那么连向重心的子树里,这样我们可以合并若干个子树,然后看是否能够先让 \(a\) 满足。
我们考虑这样子连如果 \(b\) 不满足了怎么办。注意到因为所有子树大小 \(<a\),然后如果我们已经遍历过的子树大小总和是 \(S<a\),那么如果我们新加一个子树又 \(>a\),那么 \(S<2a\)。考虑 \(n\ge 2a+b>S+b\),即 \(n-S>b\),则一定是合法的。

浙公网安备 33010602011771号