其实是对着 yhx-12243 一个一个题噶的。
板刷 ATC 计划。
[ARC078F] Mole and Abandoned Mine
求一个联通图的子图保证 \(1 \to n\) 只有一条路径且联通且边权和最大。
考虑把这一条链记下来,围绕这个这条链构造。状压下来每个点的连通性。我们需要知道的是,我们选完一条链后,每个点可以选若干联通快挂在底下。
我们考虑 \(f_{st, x}\) 表示联通性如 \(st\),目前链到了 \(x\)。
那么就有两种情况。
从 \(x\to y\) 这个可以枚举一条出边,取一个集合外的点 \(y\)。
从 \(x\) 选一个联通块,并计算其导出子图的贡献。
我们可以预处理每一个导出子图内点的贡献,以及导出子图到 \(x\) 的所有边,配合枚举子集可以做到 \(O(3 ^ n)\)。
int sub = ~(-1 << n | st);
for ( ; sub; sub = (sub - 1) & ~st)
[AGC014D] Black and White Tree
先考虑链上情况,奇数先手胜,偶数先手负。
然后我们扩展到一颗由若干条链的子树上。
若有 2 条即以上奇数链,则可以染根,然后选一条链来染必然可以,否则可以随时被破坏。
考虑拼若干子树。我们如果有若干先手败的子树,我们可以转化到父亲先手胜的子树,所以可以有以下理论。
- 两条及以上的奇链拼起来是先手必胜。
- 有两颗及以上子树是先手必败。
[AGC007D] Shik and Game
考虑这些老头爆金币肯定要等一会时间,所以可以往返,那具体是什么时候呢?
我们可以考虑在一个点出发爆金币后再往返一次,取回之前的人爆的金币,这个是最优情况。
与之对应的只需要证明爆玩金币后在走是更优的就行了。
那么咋做?
其中 \(x_i - x_j\) 不难发现为 \(0 \to e\) 这一段。我们拿单调队列维护 \(2(x_i - x_{j + 1})\geq T\) 即可。
[AGC035D] Add and Remove
考虑贡献的最小值。然后自然可以想到记下左右端点的系数,然后 dp。
观察到序列左右端点只会在最后合并一次,所以考虑逆推。
记录 \(f_{l, r, cl, cr}\) 为左右端点为 \(l - 1, r + 1\) 系数为 \(cl, cr\) 然后有:
状态数较少,直接暴搜 \(dfs(2, n - 1, 1, 1)\) 即可。
[ARC065F] シャッフル
考虑维护一个端点最右边的 \(r\)。
那么我们考虑 \(f_{i, j}\) 为前 \(i\) 个数 \(j\) 个 1。
然后我们考虑贪心调度出 1 的上下界即可。
注意 Implement。
ABC 神秘东方力量大赏。
[ABC256Ex] I like Query Problem
GJOI 原题??考虑以不相同元素个数为势能,必然修改后变小,所以除法如果 min = max 直接转化为区间加,否则暴力改即可。
注意下传 cover 时清空 add。
[ABC255Ex] Range Harvest Query
我真的不是杀软二次元()
Chtholly-Tree 模板题,考虑颜色段。
每次修改只会增加 \(O(1)\) 个颜色段,容易发现每个颜色段只会使用一次,所以是 \(O(q)\) 个。
考虑怎么计算一个段的贡献,等差数列即可。\[\frac{(d - d0)(l + r)(r - l + 1)}{2} \]
[ABC258Ex] Odd Steps
考虑 dp。
\(f_i = f_{i - 1} + f_[i - 3} + .....\)。
这些可以考虑直接使用矩阵快速幂维护,然后分段计算,对于每个 \(a_i\) 清零即可。
[ABC259Ex] Yet Another Path Counting
考虑按照每个颜色出现次数分类。
\(\geq n\) 考虑直接 \(dp\),每次讨论转移下来和新开一条路即可。
\(\leq n\) 用 \(n^2\) 的组合数算就好了。