A. CF2167E
简单题,二分,中间选连续段即可。
B. CF2167F
简单题,等价于判子树大小 \(\geq k\),换根部分拆贡献即可。
C. CF2144D
简单题,调和级数秒了。
D. CF1791G2
简单题,二分排序贪心,但是要注意第一个只能从左边到达。
E. CF1788D
魔怔。
考虑拆贡献:计算有多少相向而行的箭头,就有多少连通块。
枚举 \(i,j\) 钦定它们相向而行,则 \(i\) 左侧、\(j\) 右侧可以选的分别是前后缀,这可以二分求出。
乘法原理即可。
F. CF2112E
啊呀看成所有单色连通块了骇死我力。
考虑给定树怎么求染色方案数:如果一个点不是绿色,则整个子树与它同色。
不难想到设 \(f_u\) 表示 \(u\) 子树染色且 \(u\) 是绿色的方案数,则 \(f_u = \prod\limits_{v \in son_u} (f_v + 2)\),其中 \(+2\) 表示 \(v\) 子树全蓝或全黄。
倒过来,设 \(g_x\) 表示方案数为 \(x\) 最少要几个点。
手模发现 \(x\) 为偶数不存在,想想也是显然的,因为全绿只会被算一次。
观察样例 \(g_1 = 1, g_3 = 2, g_9 = 3\),猜测 \(g_{3^k} = k+1\),其实也是显然的(根下面连 \(k\) 个点)。
然后按照 \(f\) 的转移方程,有:\(g_x = \min\limits_{d | x} \{ g_{d-2} + g_{\frac{x}{d}} \}\),于是做完了。
G. CF1406D
感觉严格简单于 EF 两题。
上来先做差分,然后按正负性分给 \(b,c\) 序列,注意到应该是 \(b\) 末尾和 \(c\) 开头的平均值。
然后挂了,原因是不需要考虑差分中最后一项 \(-a_n\),改回来就对了。
H. ARC112C
哎这场的 E 怎么是 Union_Find。
感觉是极为困难(细节)的贪心构造。
但还是不难注意到子树奇偶性这件事:如果子树大小是奇数,出来之后先后手互换。
设 \(f_u\) 表示当前在 \(u\) 子树,先手能拿最多的金币数量(这个点金币还没拿)。
将子树分为三类:
- 偶数,\(f_v \lt sz_v - f_v\)。
- 偶数,\(f_v \geq sz_v - f_v\)。
- 奇数。
那么先手第一步会拿走金币,后手选择去往哪个子树,则后手一定会选让先手获利最少的子树,即一类全部先走完。
接着后手一定不乐意走二类,所以他会先去走三类。
将三类按照 \(f_v - (sz_v-f_v)\) 即先后手收益差升序排序,看后手去哪能让自己收益最大化。
三类走完之后只剩下二类,不改变决策顺序,所以模拟即可。
I. CF1804E
很简单的题,但是实现比较抽象。
并不难想到找到一个环,使得它的邻域为全集。
\(n\) 很小,考虑找出一个集合 \(S\) 判断它是否能是一个环,钦定 lowbit 作为起点。
直接做是 \(O(2^n n^2)\) 的,但是考虑设 \(f_{S}\) 表示访问过 \(S\) 的集合,当前可以在的点集是什么。
那么转移就从这些点继续往外走一步,复杂度是 \(O(2^n n)\).
判断邻域是否为全集是简单的。
考虑如何给环定向,其实就是把之前的再做一遍,如果能往回走一步就走(显然有解)。
J. CF1879E
不难构造出按深度 \(3\) 种颜色交替排,这样显然可以唯一确定父亲颜色。
然后交上去 WA on test 4,分析一下原因大概是:可以只用两种颜色,并不严格按深度排。
hack: (father)
1 2 1 4 5 4 7
该样例可以对 (1, 2), (4, 5), (4, 7) 分别染成 \(1\),剩下为 \(2\)。
只要保证 \(1\) 下每个子树还是按照深度排列的,对于儿子数 \(\gt 1\) 的就依然可以直接判断父亲是什么颜色(出现次数为 \(1\))。
瓶颈在于儿子数为 \(1\) 的点。我们考虑都钦定这些点和它的父亲之间染成 \(1\),再 bfs 看是否会矛盾即可。