容斥进阶
容斥进阶讲义
承接 容斥原理讲义.md。默认读者已经会:补集容斥、二项式反演、Min-Max 容斥、莫比乌斯反演、SOS DP。
本讲解决三件事:系数不是 \(\pm 1\) 时怎么求;容斥的求和式算不动时怎么用 DP / 多项式压缩;容斥藏在图计数、期望、行列式里时怎么认出来。
建议课时:3 课时(135 分钟)。前置:多项式乘法(NTT)会调用即可,不要求推导。
0. 本讲的地图
| 节 | 内容 | 关键词 |
|---|---|---|
| 1 | 反演的统一观点 | 矩阵求逆、EGF、偏序集 Möbius 函数 |
| 2 | 斯特林反演 | 幂与下降幂互换、自然数幂和 |
| 3 | 单位根反演 | 下标按模分类求和 |
| 4 | Min-Max 容斥进阶 | kth 版本、系数进 DP、树上期望 |
| 5 | 子集卷积与集合幂级数 | 连通性容斥、\(O(n^2 2^n)\) |
| 6 | 图计数中的容斥 | 连通图、DAG、生成树、二分图 |
| 7 | 容斥 + DP 深入 | 双射 → 任意映射、多维钦定 |
1. 反演的统一观点
1.1 矩阵观点
所有反演都是同一件事:\(g = A f\),所以 \(f = A^{-1} g\)。
| 反演 | \(A_{ik}\) | \(A^{-1}_{ik}\) |
|---|---|---|
| 二项式 | \(\binom{i}{k}\) | \((-1)^{i-k}\binom{i}{k}\) |
| 斯特林 | \(S(i,k)\)(第二类) | \((-1)^{i-k}s(i,k)\)(第一类,无符号) |
| 莫比乌斯 | \([k \mid i]\) | \(\mu(i/k)\) |
| 子集 | \([T \subseteq S]\) | \((-1)^{\lvert S\rvert-\lvert T\rvert}\) |
为什么有用:遇到新的"钦定关系"矩阵 \(A\),不用背公式,直接求逆(小规模手算,或用下面的生成函数 / 偏序集视角推)。
1.2 生成函数观点
二项式反演 \(g(n) = \sum_k \binom{n}{k} f(k)\) 等价于指数生成函数(EGF)关系
其中 \(\hat F(x) = \sum f(n) x^n / n!\)。
直接后果:一次反演求出所有 \(f(k)\) 只需一次卷积:
翻转下标后是标准卷积,NTT \(O(n \log n)\)。第 7.3 节会用到。
1.3 偏序集上的 Möbius 函数(Rota)
任意局部有限偏序集 \(P\),定义 \(\zeta(x, y) = [x \le y]\),其逆 \(\mu\) 由下式递归给出:
统一反演定理:
各种容斥就是各种偏序集:
| 偏序集 | \(\mu(y, x)\) | 对应 |
|---|---|---|
| 链 \(1 < 2 < \cdots\) | \(\mu(i, i+1) = -1\),其余 \(0\) | 前缀和 ↔ 差分 |
| 布尔格(子集) | \((-1)^{\lvert x\rvert - \lvert y\rvert}\) | 子集反演 |
| 整除格 | \(\mu(x/y)\) | 莫比乌斯反演 |
| 乘积偏序 \(P \times Q\) | \(\mu_P \cdot \mu_Q\) | 多维差分、多重容斥系数相乘 |
乘积偏序那一行解释了基础讲义 7.4 节 JSOI2015 三层容斥为什么系数直接相乘:行、列、颜色三个布尔格做乘积。
讲课提示:这一节是"内功",不要求学生会证,但要求能对着表格说出"我现在用的是哪个偏序集的 \(\mu\)"。
2. 斯特林反演
2.1 幂、下降幂、上升幂的互换
其中 \(S\) 是第二类斯特林数,\(s\) 是无符号第一类斯特林数,\(x^{\underline{k}} = x(x-1)\cdots(x-k+1)\)。
2.2 反演公式
证明:把 2.1 的前两式互相代入,得 \(\sum_k S(n,k)(-1)^{k-m}s(k,m) = [n = m]\),即两个矩阵互逆。
2.3 什么时候会遇到
信号是"钦定后的方案数天然带着 \(k!\,S(n,k)\) 或 \(\binom{m}{k}k^n\)"。
- \(\binom{m}{k} k^n\):钦定 \(k\) 种颜色可用(允许有颜色没用)。用二项式反演。
- \(k!\, S(n,k)\):\(n\) 个元素满射到 \(k\) 个有标号盒子。它本身就是二项式反演的结果:\(k!\,S(n,k) = \sum_i (-1)^{k-i}\binom{k}{i} i^n\)。
- \(S(n,k)\):\(n\) 个元素划分成 \(k\) 个无标号非空块。当"块"是无标号的,斯特林反演登场。
2.4 例题 A:自然数幂和(不用伯努利数)
求 \(\sum_{i=0}^{n} i^k\),\(k \le 5000\),\(n \le 10^{18}\)。
\(O(k^2)\) 预处理 \(S\),\(\binom{n+1}{j+1}\) 用 \(n+1\) 的下降幂逐项算,\(O(k)\)。
验证:\(k=2, n=2\):\(S(2,1)\cdot 1!\cdot\binom{3}{2} + S(2,2)\cdot 2!\cdot\binom{3}{3} = 3 + 2 = 5 = 0+1+4\)。\(\checkmark\)
2.5 例题 B:洛谷 P4827 [国家集训队] Crash 的文明世界
树上每个点 \(u\) 求 \(\sum_i \text{dist}(u,i)^k\),\(n \le 5\times 10^4\),\(k \le 150\)。
用 2.4 的展开:\(\text{dist}^k = \sum_j S(k,j)\,j!\binom{\text{dist}}{j}\)。于是只需对每个 \(u\) 和每个 \(j\) 求 \(\sum_i \binom{\text{dist}(u,i)}{j}\)。
关键:\(\binom{d+1}{j} = \binom{d}{j} + \binom{d}{j-1}\),所以"距离全部加一"对应一次 \(O(k)\) 的转移。树形 DP + 换根,总 \(O(nk)\)。
这道题体现斯特林数的核心用法:把不好做前缀 / 换根的 \(d^k\) 换成好做的 \(\binom{d}{j}\)。
2.6 例题 C:CF 1342E Placing Rooks
\(n \times n\) 棋盘放 \(n\) 个车,使每个格子都被攻击,且恰好有 \(k\) 对车互相攻击。
"每格被攻击" \(\iff\) 每行都有车或每列都有车。设每行都有车(另一种对称)。\(n\) 个车占 \(n\) 行,恰好 \(k\) 对互相攻击 \(\iff\) 恰好用了 \(n - k\) 列。
- 选哪 \(n-k\) 列:\(\binom{n}{k}\)。
- \(n\) 行满射到这 \(n-k\) 列:\((n-k)!\,S(n, n-k) = \sum_{i=0}^{n-k}(-1)^i\binom{n-k}{i}(n-k-i)^n\)。
\(k \ge 1\) 时"每行有车"与"每列有车"不可能同时成立,所以直接乘 2。
3. 单位根反演
3.1 公式
证明:\(n \mid k\) 时每项为 1;否则是公比 \(\omega_n^k \ne 1\) 的等比数列,和为 \(\dfrac{\omega_n^{nk}-1}{\omega_n^k - 1} = 0\)。
3.2 用途:下标按模分类求和
当 \(A\) 有闭形式(如 \((1+x)^m\))时,右边只需 \(n\) 次求值,\(O(n \log m)\)。
模意义下:需要 \(n \mid p - 1\),取 \(\omega_n = g^{(p-1)/n}\),\(g\) 是原根。\(998244353 = 119 \cdot 2^{23} + 1\),支持 \(n = 2^k\) 以及 \(7, 17\) 等因子。\(10^9 + 7 = 2 \cdot 500000003 + 1\),几乎只支持 \(n = 2\)。
3.3 例题:洛谷 P5591 LJJ 学二项式定理
求 \(\sum_{i=0}^{n}\binom{n}{i}s^i a_{i \bmod 4}\),\(n \le 10^{18}\),模 \(998244353\)。
\(\omega_4 = g^{(p-1)/4}\),\(g = 3\)。四次快速幂即可。
3.4 例题:\(\sum_i \binom{n}{i}[3 \mid i]\) 的闭式
(\(1+\omega = e^{i\pi/3}\)。)这类题在 \(p = 10^9+7\) 下没有三次单位根,需要在扩域 \(\mathbb{F}_p[\omega]\) 中运算,或改用 \(3 \times 3\) 矩阵快速幂。
3.5 视角:循环卷积
"下标模 \(n\) 分类"等价于长度为 \(n\) 的循环卷积,而单位根反演就是长度 \(n\) 的离散傅里叶变换。这解释了它为什么和 NTT 用同一套单位根。
4. Min-Max 容斥进阶
4.1 第 \(k\) 大的版本
证明:设元素从大到小 \(a_1 > a_2 > \cdots > a_n\)。\(a_i\) 作为 \(\min(T)\) 出现,当且仅当 \(T \ni a_i\) 且 \(T \setminus \{a_i\} \subseteq \{a_1, \dots, a_{i-1}\}\)。其系数总和:
第二步用了 \(\binom{i-1}{j}\binom{j}{k-1} = \binom{i-1}{k-1}\binom{i-k}{j-k+1}\)。\(\blacksquare\)
\(k = 1\) 时退化为普通 Min-Max 容斥。
4.2 系数走 DP:洛谷 P4707 重返现世
题意:\(n\) 种物品,每单位时间以概率 \(p_i / m\) 获得物品 \(i\)(\(\sum p_i = m\))。求集齐任意 \(k\) 种的期望时间。\(n \le 1000\),\(m \le 10^4\),\(n - k + 1 \le 10\)。
分析:设 \(t_i\) 为首次获得物品 \(i\) 的时刻。集齐 \(k\) 种的时刻 \(=\) \(\{t_i\}\) 的第 \(k\) 小 \(=\) 第 \(K\) 大,\(K = n - k + 1 \le 10\)。
\(2^n\) 个 \(T\) 枚举不了,但 \(E[\min(T)]\) 只和 \(p(T) = \sum_{i\in T}p_i \le m\) 有关。把系数塞进 DP,按 \(p(T)\) 分类求和。
记 \(h(T, j) = (-1)^{|T|-j}\binom{|T|-1}{j-1}\)。用 Pascal 公式:
定义 \(f[s][j] = \sum_{p(T) = s} h(T, j)\)。放一个哨兵 \(f[0][0] = 1\) 代表空集,它只在 \(j - 1 = 0\) 时被用到(生成单元素集合);\(j = 0\) 这一行永远不更新,保证空集不会被当成真实集合减掉。
// f[s][j],s ∈ [0, m],j ∈ [0, K]
f[0][0] = 1;
for (int i = 1; i <= n; i++)
for (int s = m; s >= p[i]; s--)
for (int j = K; j >= 1; j--)
f[s][j] = (f[s][j] + f[s - p[i]][j - 1] - f[s - p[i]][j] + MOD) % MOD;
ll ans = 0;
for (int s = 1; s <= m; s++)
ans = (ans + f[s][K] * m % MOD * inv(s)) % MOD;
复杂度 \(O(nmK)\)。
验证递推:\(h(\{x,y\},1) = h(\{x\},0) - h(\{x\},1) = 0 - 1 = -1\),而定义给 \((-1)^{2-1}\binom{1}{0} = -1\)。\(\checkmark\)
讲课提示:这道题的教学价值在于"容斥系数不是常数时,找它的递推,让 DP 顺便把它算出来"。学生要能独立推出 Pascal 那一步。
4.3 树上期望:洛谷 P5643 [PKUWC2018] 随机游走
题意:\(n \le 18\) 的树,从 \(s\) 出发随机游走(每步等概率到邻居)。\(q\) 次询问:给定点集 \(S\),求走遍 \(S\) 中所有点的期望步数。
分析:\(E[\max_{v \in S} t_v] = \sum_{T \subseteq S}(-1)^{|T|-1}E[\min_{v\in T} t_v]\)。
\(E[\min_{v \in T} t_v]\) = 首次到达 \(T\) 中任一点的期望步数。对固定 \(T\),令 \(f(u)\) 为从 \(u\) 出发的期望:\(u \in T\) 时 \(f(u) = 0\),否则
自底向上把 \(f(u)\) 写成 \(f(u) = A_u f(\text{fa}_u) + B_u\)。设儿子 \(v\) 已有 \(f(v) = A_v f(u) + B_v\),代入整理:
根节点没有 \(f(\text{fa})\) 项,直接得 \(f(\text{root}) = B_{\text{root}}\)。每个 \(T\) 一次 \(O(n)\) 的树形 DP,共 \(O(n 2^n)\)。
然后令 \(g(T) = (-1)^{|T|-1}E[\min T]\),对 \(g\) 做子集和(SOS DP),每个询问 \(O(1)\)。
4.4 Min-Max 的其他化身
只要"\(\max\) / \(\min\)"在某个格上成立,容斥就成立:
- lcm / gcd:质因子指数上的 max / min。\[\text{lcm}(S) = \prod_{\emptyset \ne T \subseteq S}\gcd(T)^{(-1)^{|T|-1}} \]
- 按位或 / 按位与:每一位上的 max / min(HAOI2015 按位或的本质)。
- 集合并 / 交:\(\left|\bigcup\right| = \sum(-1)^{|T|-1}\left|\bigcap\right|\),这就是基本容斥。
5. 子集卷积与集合幂级数
5.1 子集卷积
求 \(h(S) = \sum_{T \subseteq S} f(T)\, g(S \setminus T)\)。直接做是 \(O(3^n)\)。
问题:普通"或卷积"(SOS 正变换后点乘再逆变换)会把 \(T \cup U = S\) 但 \(T \cap U \ne \emptyset\) 的项也算进去。
解决:按集合大小分层,用 \(|T| + |U| = |S|\) 强制不交。
// f, g: 长度 2^n;结果 h
int n; // 元素个数
vector<vector<ll>> F(n + 1, vector<ll>(1 << n)), G = F, H = F;
for (int S = 0; S < (1 << n); S++) {
F[__builtin_popcount(S)][S] = f[S];
G[__builtin_popcount(S)][S] = g[S];
}
auto fwt_or = [&](vector<ll>& a, int sign) { // sign = 1 正变换, -1 逆变换
for (int j = 0; j < n; j++)
for (int S = 0; S < (1 << n); S++)
if (S >> j & 1) a[S] = (a[S] + sign * a[S ^ (1 << j)] + MOD) % MOD;
};
for (int i = 0; i <= n; i++) fwt_or(F[i], 1), fwt_or(G[i], 1);
for (int i = 0; i <= n; i++)
for (int j = 0; j <= i; j++)
for (int S = 0; S < (1 << n); S++)
H[i][S] = (H[i][S] + F[j][S] * G[i - j][S]) % MOD;
for (int i = 0; i <= n; i++) fwt_or(H[i], -1);
for (int S = 0; S < (1 << n); S++) h[S] = H[__builtin_popcount(S)][S];
复杂度 \(O(n^2 2^n)\)。
5.2 连通性容斥:集合幂级数的 \(\ln\) / \(\exp\)
设 \(g(S)\) = 顶点集 \(S\) 上"任意"结构的数量(如 \(2^{e(S)}\),\(e(S)\) 为 \(S\) 内部的边数),\(c(S)\) = 其中连通的数量。
每个任意结构唯一分解为:含 \(\min(S)\) 的那个连通块 \(T\),加上 \(S \setminus T\) 上的任意结构。
- 直接枚举子集:\(O(3^n)\),\(n \le 15\) 可用。
- 用子集卷积做多项式 \(\ln\):\(O(n^2 2^n)\),\(n \le 21\) 可用。
在生成函数语言里,\(g = \exp(c)\),\(c = \ln g\),其中乘法是子集卷积。
5.3 例题:洛谷 P4221 [WC2018] 州区划分
题意:\(n \le 21\) 个点的图,划分成若干块,每块的导出子图不能有欧拉回路(即不连通或有奇度点)。划分的权值 \(= \prod_i \left(\frac{w(S_i)}{w(S_1 \cup \dots \cup S_i)}\right)^p\),求所有划分的权值和。
分析:
- \(O(2^n \cdot n)\) 预处理每个 \(S\) 是否合法(连通 + 全偶度),合法则 \(a(S) = w(S)^p\)。
- \(f(S)\) = 把 \(S\) 划分完的权值和:\[f(S) = \frac{1}{w(S)^p}\sum_{T \subseteq S,\ T \ni \min(S)} f(S \setminus T)\, a(T) \]这是"钦定最小元素所在块"的标准形式,子集卷积 \(O(n^2 2^n)\)。
实现要点:按 popcount 从小到大逐层算 \(f\),每层做一次子集卷积的"第 \(i\) 层",因为 \(f\) 的第 \(i\) 层依赖 \(f\) 的前 \(i - 1\) 层和 \(a\)。
6. 图计数中的容斥
6.1 有标号连通图:洛谷 P4841 [集训队作业2013] 城市规划
\(n\) 个有标号点的无向连通图个数 \(f(n)\)。
任意图数 \(g(n) = 2^{\binom{n}{2}}\)。钦定 1 号点所在连通块大小为 \(k\):
\(O(n^2)\)。EGF 形式 \(\hat F = \ln \hat G\),多项式 \(\ln\) 做到 \(O(n \log n)\)。
验证:\(f(1) = 1, f(2) = 1, f(3) = 4, f(4) = 38\)。
6.2 有标号 DAG 计数
\(n\) 个有标号点的 DAG 个数 \(f(n)\)。
钦定 \(k\) 个点入度为 0(其余点随意,可能也有入度 0)。这 \(k\) 个点向其余 \(n-k\) 个点的边任意:\(2^{k(n-k)}\);其余点构成 DAG:\(f(n-k)\)。"至少一个入度 0 的点"容斥:
验证:\(f(1) = 1, f(2) = 3, f(3) = 25, f(4) = 543\)。
6.3 有标号二分图(可能不连通)
先数"2-染色图":点分成黑白两色再任意连黑白边,\(C(n) = \sum_k \binom{n}{k}2^{k(n-k)}\)。
每个有 \(c\) 个连通块的二分图被数了 \(2^c\) 次(每块两种染法)。在 EGF 上:\(\hat C = \exp(2\hat B_{\text{conn}})\),于是
多项式开根一行解决。这是"每个连通块被重复计数常数次 → 取 \(\ln\) 除掉 → \(\exp\) 回去"的模板。
6.4 生成树:CF 917D Stranger Trees
题意:\(n \le 100\),给定树 \(T\),对每个 \(k\) 求有多少棵 \(n\) 个点的生成树恰好与 \(T\) 有 \(k\) 条公共边。
方法一(容斥):\(g(k)\) = 钦定 \(T\) 的某 \(k\) 条边必须在生成树中。这 \(k\) 条边把点集分成 \(c = n - k\) 个连通块,大小 \(a_1, \dots, a_c\)。Cayley 推广:把 \(c\) 个块连成树的方案数为 \(n^{c-2}\prod a_i\)。
\(\prod a_i\) 可以理解为"每块选一个代表点",树形 DP:\(dp[u][j][0/1]\) = 子树 \(u\) 中选了 \(j\) 条边、\(u\) 所在块是否已选代表。\(O(n^2)\) 求出所有 \(g(k)\),再二项式反演。
方法二(矩阵树 + 插值,不用容斥):把 \(T\) 中的边权设为 \(x\),其他边权设为 \(1\)。矩阵树定理给出的行列式是关于 \(x\) 的 \(n-1\) 次多项式,\(x^k\) 的系数恰为答案。取 \(n\) 个不同的 \(x\) 各算一次行列式,拉格朗日插值还原。\(O(n^4)\)。
讲课提示:两种方法都要讲。方法一体现"钦定 → 反演",方法二体现"用变量给对象打标记,把计数问题变成多项式系数",后者在很多题目里更通用。
6.5 网格路径避开障碍:CF 559C Gerald and Giant Chess
\(h \times w\) 网格从左上到右下,\(m \le 2000\) 个障碍格不能经过。
把障碍按 \((x, y)\) 排序,终点作为第 \(m+1\) 个"障碍"。\(f(i)\) = 从起点到障碍 \(i\) 不经过其他障碍的路径数:
"钦定第一个经过的障碍是 \(j\)"。\(O(m^2)\)。这是容斥的"第一次"形式:减去按"第一次违反"分类的方案,每个坏方案恰好减一次,不需要正负交错。
7. 容斥 + DP 深入
7.1 系数进 DP 的三种姿势
| 姿势 | 做法 | 例题 |
|---|---|---|
| 转移带 \(-1\) | 每"钦定违反"一次乘 \(-1\) | 相邻同色段 DP |
| 先 DP 后反演 | DP 算出"钦定 \(k\) 个",再二项式反演 | BZOJ3622、6.4 方法一 |
| 系数自带递推 | Pascal 公式进转移 | 4.2 重返现世 |
7.2 例题:CF 1228E Another Filling the Grid
\(n \times n\) 网格每格填 \(1..k\),要求每行、每列的最小值都恰好是 1。\(n \le 250\)。
钦定 \(i\) 行 \(j\) 列没有 1(其余随意)。这些行列覆盖 \(n^2 - (n-i)(n-j)\) 个格子,每格 \(k-1\) 种;剩余格子每格 \(k\) 种。
\(O(n^2 \log)\),预处理幂后 \(O(n^2)\)。验证 \(n = 1\):\(k - (k-1) - (k-1) + (k-1) = 1\)。\(\checkmark\)
7.3 例题:洛谷 P4491 [HAOI2018] 染色
题意:长 \(n\) 的序列,\(m\) 种颜色。若恰好出现 \(S\) 次的颜色有 \(k\) 种,得分 \(W_k\)。求所有染色方案的得分和。\(n \le 10^7\),\(m \le 10^5\)。
钦定 \(i\) 种颜色恰好出现 \(S\) 次,其余位置随意染其余 \(m - i\) 色:
反演 \(f(k) = \sum_{i \ge k}(-1)^{i-k}\binom{i}{k}g(i)\),用 1.2 节的卷积形式 NTT 一次算出所有 \(f(k)\),答案 \(\sum_k W_k f(k)\)。
7.4 例题:洛谷 P3349 [ZJOI2016] 小星星
题意:树 \(T\) 和图 \(G\) 都有 \(n \le 17\) 个点。求双射 \(\phi: V(T) \to V(G)\) 的个数,使得树的每条边 \((u,v)\) 都满足 \((\phi(u), \phi(v)) \in E(G)\)。
难点:"双射"这个约束让树形 DP 需要记录哪些图点已用,\(O(2^n \cdot n^2)\) 状态之外还要转移,做不动。
容斥去双射:枚举图点子集 \(S\),令 \(f(S)\) = 把树点映射到 \(S\) 中(允许重复)且满足边约束的方案数。这是简单树形 DP:\(dp[u][x]\) = 子树 \(u\) 中 \(u\) 映到 \(x \in S\) 的方案数,\(O(n^3)\) 每个 \(S\)。
映射的像恰好是 \(V(G)\) 的方案数,由子集反演:
总 \(O(2^n n^3)\)。
模板化:"双射难,任意映射易" → 枚举像的超集 \(S\),求"像 \(\subseteq S\)"的数量,子集反演得"像 \(= V\)"。所有"每个目标恰好用一次"的约束都可以这样去掉。
8. 常见错误清单(进阶版)
- kth Min-Max 的 \(\binom{|T|-1}{k-1}\) 写成 \(\binom{|T|}{k}\)。 上指标是 \(|T| - 1\)。
- 单位根反演在 \(10^9+7\) 下用。 该模数几乎没有可用的单位根,需换 \(998244353\) 或扩域。
- 斯特林反演符号放错类。 \(S \to s\) 方向的符号 \((-1)^{n-k}\) 跟着第一类 \(s\)。
- 子集卷积直接用或卷积。 必须按 popcount 分层,否则相交的 \(T, U\) 被算入。
- DAG 计数符号。 是 \((-1)^{k+1}\),\(k = 1\) 项为正。
- EGF 反演忘乘 / 除阶乘。 \(f(k)\) 和 \(\dfrac{f(k)}{k!}\) 要分清。
- 连通性容斥忘记钦定最小元素。 不钦定会导致每种划分按块数的阶乘重复计数。
- 重返现世的 \(j = 0\) 行被更新。 空集哨兵一旦被当成真实集合减掉,系数全错。
9. 课堂练习
- 证明 \(\sum_{k}(-1)^{k-m}S(n,k)\,s(k,m) = [n = m]\)。
- 写出 \(\sum_i\binom{n}{i}[4 \mid i]\) 的闭式。(答:\(\dfrac{2^n + 2\cdot 2^{n/2}\cos\frac{n\pi}{4}}{4}\))
- 手算有标号 DAG 数 \(f(3) = 25\),写出每一项。
- 手算有标号连通图数 \(f(4) = 38\)。
- 推导 \(\text{lcm}\) 的 Min-Max 容斥式,并解释为什么指数上成立。
- 对 4.2 节,验证 \(h(\{x,y,z\}, 2) = 2\) 同时满足定义和递推。
- 实现 5.1 的子集卷积,用暴力 \(O(3^n)\) 在 \(n = 10\) 下对拍。
- 思考:6.5 的"第一次违反"容斥为什么不需要 \((-1)^{|S|}\)?它对应 1.3 节哪个偏序集?(答:链)
10. 推荐题单
| 难度 | 题目 | 考点 |
|---|---|---|
| 基础 | 洛谷 P4827 Crash 的文明世界 | 斯特林数拆幂 + 换根 |
| 基础 | CF 1342E Placing Rooks | 满射计数 |
| 基础 | 洛谷 P5591 LJJ 学二项式定理 | 单位根反演 |
| 基础 | CF 559C Gerald and Giant Chess | 第一次违反容斥 |
| 基础 | 洛谷 P4841 城市规划 | 连通图计数 |
| 提高 | CF 1228E Another Filling the Grid | 二维钦定 |
| 提高 | 洛谷 P4491 [HAOI2018] 染色 | 二项式反演 + NTT |
| 提高 | 洛谷 P3349 [ZJOI2016] 小星星 | 双射 → 子集反演 |
| 提高 | 洛谷 P4707 重返现世 | kth Min-Max + 系数 DP |
| 提高 | 洛谷 P5643 [PKUWC2018] 随机游走 | Min-Max + 树上消元 + SOS |
| 提高 | CF 917D Stranger Trees | 生成树容斥 / 矩阵树插值 |
| 挑战 | 洛谷 P4221 [WC2018] 州区划分 | 子集卷积 |
| 挑战 | 洛谷 P6295 有标号 DAG 计数 | DAG 计数 + 多项式 |
| 挑战 | 洛谷 P5748 集合划分计数 | 集合幂级数 exp |
| 挑战 | CF 1034E Little C Loves 3 III | 子集卷积技巧 |
附录:一页纸总结
思路检查表:系数不是 \(\pm1\) → 找递推或求逆矩阵;\(2^n\) 项算不动 → 按"决定值的量"分类进 DP;"恰好 / 双射 / 连通"→ 换成"钦定 / 任意映射 / 任意" 再反演。

浙公网安备 33010602011771号