CF1935F Andrey's Tree

· · 题解

CF1935F Andrey's Tree

给一个简单的线性做法。

先考虑答案下界,显然不小于 deg_v - 1,是否能达到该下界呢?

考虑 v = 1v = n 的情况,此时所有编号构成连续段。对此有一个非常经典的构造:求出每个连通块的编号最大值 mx,若 mx 不是编号最大的点,则从 mxmx + 1 连边。这样会连出一棵有根树,根为 mx_i 最大的连通块,且从每个连通块开始不断跳父亲都会跳到该连通块,因为每个非 mx 最大的点都有父亲,且父亲 mx 大于其 mx

对于 v\neq 1, n 的情况,可类似构造。具体地,若不存在 mx_i + 1 = v,则使用上述方法构造即可。若存在,则还需分两种情况讨论:

换根 DP 计算每个点的每棵子树的 mnmx,时间复杂度 \mathcal{O}(n)。代码。