Loading

[AGC004F] Namori 题解

先考虑树的问题:$(m=n-1)$

每次操作相邻两个颜色相同的节点,这样会使得黑的颜色的数量发生变化。所以我们以 $1$ 为根,每个点的颜色异或上每个点深度模 $2$ 。这样我们每次就变成了操作两个颜色不同的点,就是可以将一个黑色的点移动一步,两个黑色的点不能重叠。无解的情况显然就是初始的黑点个数和终止时的不同时。

考虑计算每条边的贡献,初始点 $u$ 的子树内有 $a$ 个黑点和 $b$ 个白点,最终情况就是变成 $b$ 个黑点和 $a$ 个白点。所以点 $u$ 的贡献就是 $|a-b|$ 。我们把白点的权值记为 $1$ ,黑点的权值记为 $-1$ , $a_i$ 表示子树的权值和。答案就是 $\sum |a_i | $。

现在考虑基环树的问题:$(m=n)$

需要分奇环和偶环考虑:

偶环:

我们以 $1$ 为根,找到一颗 $\operatorname {dfs}$ 树,剩下的那条边从 $u$ 到 $v$ ($u$ 是 $v$ 的祖先) 。那么环就是 $v \to fa_v \to \cdots \to u \to v$ 。我们枚举 $v$ 到 $u$ 走了 $x$ 个黑点 (注意 $x$ 可以为负) 。那么显然只有环上的点(除了点 $u$) 的 $a_i$ 会减少 $x$ ,最后再加上一个 $|x|$ 的贡献 。

现在我们的问题就变成了找一个整数 $x$ 使得 $\sum |a_i-x|$ 最小 (我们设 $a_0 = 0$),这是一个经典的问题,当 $x$ 取中位数时取到最小值。

奇环:

奇环的话点 $u$ 到 $v$ 这条边就可以使得黑点的数量加 $2$ 或减 $2$。那么进行这种操作的数量是定值。设还需要 $k$ 个黑点,(需要判掉 $k$ 为奇数时无解) 那么就相当于在点 $u$ 和 $v$ 加入了 $k/2$ 个黑点。我们把这个操作提前不影响答案。这样就变成树的问题了。

posted @ 2023-09-22 21:06  Bobby7000  阅读(23)  评论(0)    收藏  举报