[AGC041F] Histogram Rooks
\(\mathbf{Part. 0}\)
第一步似乎没有特别显然的直接转换,于是考虑观察和熟悉正方形棋盘的结构。
如图,我们大致可以把原图划分成这样的结构。显然,整个图大致呈显出一颗树的形态,这棵树我们一般称之为 广义笛卡尔树,每行都是完整的一行,每列都被划分为若干个区间。除此之外没有什么特别的性质。如果我们直接将原题转化成笛卡尔树,会将网格之间的关系弱化,没有网格图那么直观。(如,两个网格是否在同一行上这个信息会变得不太直观)
回到问题,题目要求放置车使得每格都被至少一个车所覆盖。如果直接扔掉网格图,转化成笛卡尔树的形式来观察,会有一个 \(\mathcal{O}(n^4)\) 的做法,再优化非常困难,也没有什么显然的性质。所以回到网格图的形式去思考问题。
由于一个车放置下来,对上下左右都有影响,这导致在原网格图上 DP 没什么前途,而且笛卡尔树也无法通过。似乎这题就 G 了?
\(\mathbf{Part. 1}\)
其实不然。如果让所有网格都被恰好覆盖很困难,那我们可以考虑让一些格子不选,因此考虑容斥。设 \(T\) 为所有网格的集合,我们定义 \(x\) 为 单独的 表示 我们钦定了 \(x\) 没有被车覆盖(但如果我们没有钦定,它没被车覆盖,它也不是单独的,这是因为我们需要让后续计算可以容斥),定义 \(f(S)\)(其中 \(S \subseteq T\)) 表示如果我们钦定 \(\forall x \in S\),\(x\) 单独的方案数。显然,原题要你求的是 \(\Big(\bigcup\limits_{i = 1}^{|T|}f\big(\{i\}\big)\Big)^{C} = 2^{|T|} - \bigcup\limits_{i = 1}^{|T|}f\big(\{i\}\big)\)。到这里很明显可以用容斥转换,即 \(\bigcup\limits_{i = 1}^{|T|}f\big(\{i\}\big) = \sum\limits_{S\subseteq T} (-1)^{|S|}f\big(S\big)\)。
那 \(f(S)\) 是什么?对于一个 \(x \in S\),容易发现对于所有与 \(x\) 同行同列的格子 \(p\) ,由于 \(x\) 是单独的,所以 \(p\) 不能放置车。假设 \(A(S)\) 表示当 \(x \in S\) 是单独的时,能放置车的格点集合,那么 \(x \in A(S)\) 的点都可以选或不选,故 \(f(S) = 2^{|A(S)|}\)。
总结一下,答案为 \(2^{|T|} - \sum\limits_{S\subseteq T} (-1)^{|S|}2^{|A(S)|}\)。时间复杂度为 \(\mathcal{O}(2 ^ {|T|}|T|)\),显然过不了。
\(\mathbf{Part. 2}\)
由于求 \(A(S)\) 十分慢,所以考虑转化。面对这个式子,可能可以反演乱搞,但是我不会。面对这个式子,我们可能需要通过给 \(f(S)\) 适当分组,每个组别的方案数一起计算。但是如何分组能减少计算量?
在 \(\mathbf{Part. 0}\) 中,我们有一个(显然的)观察:每行都是完整的一行。所以考虑行显然比列更简单。接下来很巧妙:我们考虑枚举行的集合 \(S'\) 来对 \(f(S)\) 进行分组,对于 \(\forall x \in S'\),第 \(x\) 行必定存在一个单独的格,而对于 \(\forall x \notin S'\),第 \(x\) 行不存在任意一个单独的格(由于这里是分组,所以 \(S'\) 外的行不能有单独的格,否则组之间会重复)。
我们定义 列连通块 表示同列中一段极长联通的一段点,设 \(g(S') = \sum (-1)^{|S|}f(S)\),其中 \(S\) 的所有点都在 \(S'\) 的行内。显然,只有第 \(x \in S'\) 行不能放置任何的车,所以单独的点对行的影响已经固定了,这时候列连通块之间就不会互相影响,因此列连通块之间独立。因此,我们可以分别考虑各个列连通块的贡献,由乘法原理,乘起来就是该分组内的 \(g(S')\)。
设当前考虑的列连通块点集为 \(B\),\(B\) 中行属于 \(S'\) 的点集为 \(B'\):
- 如果 \(B'\) 中没有任何的单独的点,那么 \(x \in B - B'\) 都可以放车,那么贡献为 \(2^{|B| - |B'|}\)。
- 如果 \(B'\) 中存在单独的点,那么考虑 \(x \in B'\) 中的点哪些是单独的点,贡献为 $$\sum\limits_{\emptyset \neq C \subseteq B'} (-1)^{|C|} = \Big(\sum\limits_{i \geq 0} \binom{|B'|}{i} (-1)^{i}\Big) - 1 = (1 - 1)^{|B'|} - 1 = -[B' \neq \emptyset]$$
举个例子,如果当前我们网格图只有一列,有两个列连通块 \(B_1 = \{1, 2\}, B_2 = \{4, 5\}\),\(S' = \{2, 4\}\),则它们的贡献分别是 \(2^1 + (-1)^1\) 和 \(2^1 + (-1)^1\)。两数相乘,\(\Big(2^1 + (-1)^1\Big) \times \Big(2^1 + (-1)^1\Big) = 2^1 \times 2^1 + 2^1 \times (-1)^1 + (-1)^1 \times 2^1 + (-1)^1 \times (-1)^1\),此时每一项都恰好是一个 \(S'\) 分组中的 \((-1)^{|S|}f(S)\),总和就是 \(\sum (-1)^{|S|}f(S) = g(S')\)。
综上,列连通块的贡献为 \(P = \prod\limits(2^{|B| - |B'|} - [B' \neq \emptyset])\)。
\(\mathbf{Part. 3}\)
但是其实这是有问题的。我们虽然保证了对于 \(\forall x \notin S'\),第 \(x\) 行不存在任意一个单独的格,但是对于 \(\forall x \in S'\),第 \(x\) 行必定存在一个单独的格是没有保证的。咋办呢?
每行都存在一个单独的格子很难算,我们就反过来(是不是很熟悉的话术)。考虑 \(h(T, S')\),其中 \(T \subseteq S'\) 表示对于 \(\forall x \in T\),第 \(x\) 行没有单独的格子,则 \(g(S') = P - \sum\limits_{\emptyset \neq T \subseteq S'} (-1)^{|T|} h(T, S')\)。考虑和 \(P\) 类似的方式来计算 \(h(T, S')\) 的贡献。
设当前考虑的列连通块点集为 \(B\),\(B\) 中行属于 \(S'\) 的点集为 \(B'\),\(B'\) 中行不属于 \(T\) 的点集为 \(B''\):
- 如果 \(B'\) 中没有任何的单独的点,那么 \(x \in B - B'\) 都可以放车,那么贡献为 \(2^{|B| - |B'|}\)。(这一部分没有变化)
- 如果 \(B'\) 中存在单独的点,那么考虑 \(x \in B''\) (注意这里又区别)中的点哪些是单独的点,贡献为 $$\sum\limits_{\emptyset \neq C \subseteq B''} (-1)^{|C|} = \Big(\sum\limits_{i \geq 0} \binom{|B''|}{i} (-1)^{i}\Big) - 1 = (1 - 1)^{|B''|} - 1 = -[B'' \neq \emptyset]$$
综上,列连通块的贡献为 \(P = \prod\limits(2^{|B| - |B'|} - [B'' \neq \emptyset])\)。
最终的式子为:
到此为止,我们终于可以 \(\mathcal{O}(3^n|T|)\) 来解决这个问题。
\(\mathbf{Part. 4}\)
搞了半天复杂度似乎还是很劣,于是回到原题。在 \(\mathbf{Part. 0}\) 中,我们有一个(显然的)观察:网格图可以建成广义笛卡尔树。因此现在考虑在广义笛卡尔树上 DP。广义笛卡尔树就是我们所说的列连通块,只是把这种“比较厚”的连续段缩在了一大块。lsj2009 告诉我们:
广义笛卡尔树给出了比较好的解决方法。广义笛卡尔树上分 方点 和 圆点,前者刻画为一个 区间,后者为一个 单独的点。
对于上面的答案式子,我们注意到我们只需要关注 \(|B| - |B'|\) 和 \([B'' = \emptyset]\)。于是 \(dp\) 状态记录这两个值。
同样的,我们设 \(S'\) 为枚举的行的集合,我们设 \(f_{i, j, k}\) 表示在 \(i\) 这个方点上(这对应了一个列连通块 \(Q\)),我们暂且只保留 \(S'\) 在 \(Q\) 中的部分,\(j\) 表示 \(S'\) 的大小,以及当前是否有 \([B'' = \emptyset] = [|S'| = |T|]\)。
那么,对于合并一个儿子来说:
进行完子树合并之后,考虑该段对整体的贡献。我们定义 \(b_u\) 为 \(u\) 这段的厚度,则:
圆点用于初始化容斥系数,即:
由于转移需要快速幂,所以总时间复杂度为 \(\mathcal{O}(n^2\log{n})\)。
Submission Link(lsj2009 写的)

浙公网安备 33010602011771号