CF1935F Andrey's Tree
CF1935F Andrey's Tree
给一个简单的线性做法。
先考虑答案下界,显然不小于
考虑
对于
-
若一部分连通块构成了
1\sim v - 1 ,另一部分连通块构成了v + 1\sim n ,则无论如何,连接分别属于这两部分的连通块的边的权值不小于2 ,而这样的边至少有一条,所以答案下界为deg_v 。使用上述方法构造,并将(v - 1, v) 改成(v - 1, v + 1) 即可。 -
若并非上述情况,则存在连通块同时含有
[1, v - 1] 和[v + 1, n] 中的点。这些连通块就是沟通[1, v - 1] 和[v + 1, n] 的桥梁。我们将连通块按照mx 是否小于v 分为两部分L, R 。对于R 的所有连通块,从mx 向mx + 1 连边。对于L ,就相反地考虑,从mn 向mn - 1 连边。这样至少连出了deg_v - 2 条边,因为不能连(n, n + 1) 和(1, 0) 。首先要证明这样不会连出环:从
R 中的连通块出发,不断跳出边,最终一定能到达mx = n 的连通块;从L 中的连通块出发,要么跳到某个R 中的连通块再跳到mx = n 的连通块,要么跳到L 中mn = 1 的连通块。无论是从连边方式,还是从上述证明,都可以看出此时不连通(只连了
deg_v - 2 条边)当且仅当mn = 1 的连通块属于L 。此时只需取出R 中mn 最小的连通块,然后在mn 和mn - 1 之间连边即可:容易证明此时mn 和mn - 1 不连通。
换根 DP 计算每个点的每棵子树的