ATC 做题记录

发布时间 2023-10-29 20:58:48作者: CustLucis0N

其实是对着 yhx-12243 一个一个题噶的。

板刷 ATC 计划。

[ARC078F] Mole and Abandoned Mine
求一个联通图的子图保证 \(1 \to n\) 只有一条路径且联通且边权和最大。
考虑把这一条链记下来,围绕这个这条链构造。状压下来每个点的连通性。我们需要知道的是,我们选完一条链后,每个点可以选若干联通快挂在底下。
我们考虑 \(f_{st, x}\) 表示联通性如 \(st\),目前链到了 \(x\)
那么就有两种情况。
\(x\to y\) 这个可以枚举一条出边,取一个集合外的点 \(y\)

\[f_{st, x} + e_{x, y} \underset{y \notin st}\to f_{st \cup y, y} \]

\(x\) 选一个联通块,并计算其导出子图的贡献。

\[f_{st, x} + val_{G, x} \underset{y \notin st}\to f_{st \cup G, 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

考虑这些老头爆金币肯定要等一会时间,所以可以往返,那具体是什么时候呢?
我们可以考虑在一个点出发爆金币后再往返一次,取回之前的人爆的金币,这个是最优情况。
与之对应的只需要证明爆玩金币后在走是更优的就行了。
那么咋做?

\[f_i = \min f_j + (x_i - x_j) + max\{2(x_i - x_{j + 1}), T\} \]

其中 \(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\) 然后有:

\[f_{l, r, cl, cr} = \min f_{l, i - 1, cl, cl + cr} + f_{i + 1, r, cl + cr, cr} + (cl + cr) * a_i \]

状态数较少,直接暴搜 \(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\) 的组合数算就好了。