← 全部文章

容斥 学习笔记

本文目录(13 节)
  1. 容斥原理
  2. 多重集组合数
  3. 反演
  4. 欧拉反演
  5. 莫比乌斯反演
  6. 子集反演
  7. 多重子集反演
  8. 二项式反演
  9. 【例题】BZOJ2839 集合计数
  10. 最值反演 / Min-Max 容斥
  11. 【例题】LOJ2127 按位或
  12. 推广到 kth
  13. 【例题】P4707 重返现世

小小的知识点,大大的坑。

容斥原理

设集合 S1…nS_{1\dots n},有 ∣⋃i=1nSi∣=∑k=1n(−1)k+1∑1≤p1<p2<⋯<pk≤n∣⋂i=1kSpi∣ \left| \bigcup_{i=1}^n S_i \right| = \sum_{k=1}^n(-1)^{k+1}\sum_{1\le p_1 < p_2 < \cdots < p_k \le n} \left| \bigcap_{i=1}^k S_{p_i} \right|

多重集组合数

设集合 SS 是由 kk 个不同元素组成的大小为 nn 的可重集合,对于 i∈[1,k]i \in [1,k],第 ii 个元素有 nin_i 个。
对于 r∈[0,n]r \in [0,n],求从 SS 中选出 rr 个元素组成一个多重集的方案数。

答案为 ∑t=0k(−1)t∑1≤p1<p2<⋯<pt≤k(r+k−1−t−∑i=1tnpik−1) \sum_{t=0}^k (-1)^t \sum_{1 \le p_1 < p_2 < \cdots < p_t \le k} \binom {r + k - 1 - t - \sum_{i=1}^{t}n_{p_i}}{k - 1}

反演

反演就是一些特殊的容斥。

欧拉反演

n=∑d∣nφ(d) n = \sum_{d|n} \varphi(d)

莫比乌斯反演

若 f(n)=∑d∣ng(d) f(n) = \sum_{d|n} g(d) 则 g(n)=∑d∣nμ(nd)f(d) g(n) = \sum_{d|n}\mu(\frac nd)f(d) 若 f(d)=∑d∣ng(n) f(d) = \sum_{d|n} g(n) 则 g(d)=∑d∣nμ(nd)f(n) g(d) = \sum_{d|n} \mu(\frac nd) f(n)

子集反演

若 f(S)=∑T⊆Sg(T) f(S) = \sum_{T \subseteq S} g(T) 则 g(S)=∑T⊆S(−1)∣S∣−∣T∣f(T) g(S) = \sum_{T \subseteq S} (-1)^{|S|-|T|} f(T)

若 f(S)=∑S⊆Tg(T) f(S) = \sum_{S \subseteq T} g(T) 则 g(S)=∑S⊆T(−1)∣T∣−∣S∣f(T) g(S) = \sum_{S \subseteq T}(-1)^{|T|-|S|}f(T)

多重子集反演

对于集合 SS,定义 μ(S)\mu(S):若 SS 存在重复元素则为 00,否则为 (−1)∣S∣(-1)^{|S|}。

若 f(S)=∑T⊆Sg(T) f(S) = \sum_{T \subseteq S} g(T) 则 g(S)=∑T⊆Sμ(S−T)f(T) g(S) = \sum_{T \subseteq S} \mu(S - T)f(T) 若 f(S)=∑S⊆Tg(T) f(S) = \sum_{S \subseteq T} g(T) 则 g(S)=∑S⊆Tμ(T−S)f(T) g(S) = \sum_{S \subseteq T} \mu(T - S)f(T) 莫比乌斯反演是多重子集反演的特殊形式。

二项式反演

若 f(n)=∑k=0n(nk)g(k) f(n) = \sum_{k=0}^n \binom nk g(k) 则 g(n)=∑k=0n(−1)n−k(nk)f(k) g(n) = \sum_{k=0}^n (-1)^{n-k} \binom nk f(k)

二项式反演是子集反演的特殊形式。

【例题】BZOJ2839 集合计数

设交集至少有 ii 个元素的方案数为 f(i)f(i),则 f(i)=(ni)(22n−i−1) f(i) = \binom ni \left(2^{2^{n-i}}-1\right) 设交集恰好有 ii 个元素的方案数为 g(i)g(i),则 f(i)=∑j=in(ji)g(j) f(i) = \sum_{j = i}^n \binom ji g(j) 二项式反演一下,则 g(i)=∑j=in(−1)j−i(ji)f(j) g(i) = \sum_{j=i}^n (-1)^{j-i} \binom ji f(j) 因此答案为 g(k)=∑i=kn(−1)i−k(ik)(ni)(22n−i−1) g(k) = \sum_{i=k}^n (-1)^{i-k} \binom ik \binom ni \left(2^{2^{n-i}}-1\right) 时间复杂度 O(n)\mathcal O(n)。

最值反演 / Min-Max 容斥

对于一个集合 SS,有 max⁡(S)=∑T⊆S(−1)∣T∣+1min⁡(T) \max(S) = \sum_{T \subseteq S}(-1)^{|T|+1} \min(T)

min⁡(S)=∑T⊆S(−1)∣T∣+1max⁡(T) \min(S) = \sum_{T \subseteq S}(-1)^{|T|+1} \max(T)

这两个式子在期望下也成立。

【例题】LOJ2127 按位或

max⁡(S)\max(S) 表示 SS 被全部或为 11 的期望时间,min⁡(S)\min(S) 表示 SS 被或到至少一位为 11 的期望时间,则有 ans=max⁡(S)=∑T⊆S(−1)∣T∣+1min⁡(T)=∑T⊆S(−1)∣T∣+111−∑X⊆(U−T)p(X) \begin{aligned}ans &= \max(S) \\\\&= \sum_{T \subseteq S}(-1)^{|T|+1} \min(T) \\\\&= \sum_{T \subseteq S}(-1)^{|T|+1} \frac1 {1-\sum_{X \subseteq (U-T)} p(X)} \\\\\end{aligned} FWT 即可,时间复杂度 O(2nn)\mathcal O(2^nn)。

推广到 kth

kthmax⁡(S)=∑T⊆S(−1)∣T∣+k(∣T∣−1k−1)min⁡(T) kth\max(S) = \sum_{T \subseteq S}(-1)^{|T|+k} \binom {|T|-1}{k-1} \min(T)

kthmin⁡(S)=∑T⊆S(−1)∣T∣+k(∣T∣−1k−1)max⁡(T) kth\min(S) = \sum_{T \subseteq S}(-1)^{|T|+k} \binom {|T|-1}{k-1} \max(T)

这两个式子在期望下也成立。

【例题】P4707 重返现世

ans=kthmax⁡(S)=∑T⊆S(−1)∣T∣+k(∣T∣−1k−1)min⁡(T)=∑T⊆S(−1)∣T∣+k(∣T∣−1k−1)m∑i∈Tp(i) \begin{aligned}ans &= kth\max(S) \\\\&= \sum_{T \subseteq S}(-1)^{|T|+k} \binom {|T|-1}{k-1} \min(T) \\\\&= \sum_{T \subseteq S}(-1)^{|T|+k} \binom {|T|-1}{k-1} \frac m{\sum_{i\in T}p(i)} \\\\\end{aligned}

然后可以 DP,时间复杂度 O(nm(n−k))\mathcal O(nm(n-k))。

评论

    填写昵称即可留言。评论经站主审核后公开,请勿提交私人信息。

    正在连接评论服务…