题意
给定一棵 \(n\) 个点的二叉树,现对其每个点染成黑色或白色。
一种合法的染色方案满足:
- 对于所有黑色的点,都存在白色的点与之相邻。
- 对于所有白色的点,都存在黑色的点与之相邻。
一种染色方案的权值是染成黑色的点数与染成白色的点数之差的绝对值。
\(\forall i\in(1,n]\),求出保留前 \(i\) 个点的最小权值,并构造出保留 \(n\) 个点时,权值为最小权值的任一染色方案。保证前 \(i\) 个点构成一棵二叉树。
多组数据。
\(1\le T \le 10^4,n>1,\sum\limits n\le 2\times 10^5\)
题解
显然答案有个下界是 \(n\bmod 2\)。
观察样例,发现答案只有 \(0,1,2\) 三种,手模一下 \(n\) 较小的情况,除了 \(4\) 个点的菊花图答案为 \(2\) 外,总能取到 \(n\bmod 2\)。即对于第一问,答案为 \(i\bmod 2\),特判 \(4\) 个点的菊花图即可。考虑构造证明。
发现可以把整棵树分成若干个连通块,每个连通块内只依赖自身就能保证合法。换言之,删掉该连通块对于剩下点的方案构造不影响。可以把整棵树划分为若干个大小为 \(2\) 或 \(3\) 的连通块,逐个删去。
对于一个非根节点,有以下四种情况:
-
该节点是叶节点,返回自身。
-
该节点的左右儿子仅有一个未被划分,用该节点和该儿子划分成一个大小为 \(2\) 的连通块。
-
该节点的左右儿子均未被划分,用该节点和其左右儿子划分成一个大小为 \(3\) 的连通块。
-
该节点的左右儿子均已被划分,返回自身。
我们定义黑点的权值为 \(1\),白点权值为 \(-1\)。我们发现大小为 \(2\) 的连通块必定染成一个白点和一个黑点,权值和为 \(0\)。对于大小为 \(3\) 的连通块,有两种染色方案,权值和为 \(\pm 1\),可以交替着取。这样构造肯定是最优的,总权值和在 \(\left[-1,1\right]\) 中。
对于根节点,可能会有一些边界问题,均可以通过调整法解决。懒得分类,当删点删到 \(n\le 10\) 时,用爆搜找到剩下的点最优的染色方案。
令 \(m=10\),时间复杂度 \(O(\sum n+2^m T)\)。
标签:10,连通,Coloring,个点,题解,le,Diverse,权值,节点 From: https://www.cnblogs.com/Terac/p/18038213