文章目录
1 基本形式
∣ ⋃ i = 1 n A i ∣ = ∑ k = 1 n ( − 1 ) k − 1 ∑ 1 ≤ i 1 < i 2 < i 3 < ⋯ < i k ≤ n ∣ A i 1 ∩ A i 2 ∩ A i 3 ∩ ⋯ ∩ A i k ∣ | \bigcup \limits _{i=1} ^n A_i| = \sum \limits _{k=1} ^n (-1)^{k-1} \sum \limits _{1 \leq i_1 < i_2 < i_3 < \dots < i_k \leq n} |A_{i_1} \cap A_{i_2} \cap A_{i_3} \cap \dots \cap A_{i_k}| ∣i=1⋃nAi∣=k=1∑n(−1)k−11≤i1<i2<i3<⋯<ik≤n∑∣Ai1∩Ai2∩Ai3∩⋯∩Aik∣
1.1 证明
- 数学归纳法
- 考虑每一个元素 x x x 的贡献
2 应用
2.1 错排
求把 1 − n 1-n 1−n 放在 n n n 个位置上,使得 i i i 位置上放的数不是 i i i 的方案数。
2.1.1 递推做法
d n = ( n − 1 ) ( d n − 1 + d n − 2 ) d_n = (n - 1)(d _ {n - 1} + d_{n - 2}) dn=(n−1)(dn−1+dn−2)
思路:考虑第 n n n 个位置上的数放在 x x x 处,分 x x x 放在 n n n 和放在 y ( y ≠ n ) y\space (y \neq n) y (y=n) 两种情况考虑。
2.1.2 容斥做法
令 A x A_x Ax 为 i ∈ x ∣ a i = i i \in x | a_i = i i∈x∣ai=i 的排列集,
则
a n s = n ! − ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ = n ! − ∑ ∣ A { i } ∣ + ∑ ∣ A { i , j } ∣ − ∑ ∣ A { i , j , k } ∣ + … = n ! − ( n 1 ) ( n − 1 ) ! + ( n 2 ) ( n − 2 ) ! − ( n 3 ) ( n − 3 ) ! + … = ∑ i = 2 n ( n i ) ( − 1 ) i ( n − i ) ! \begin{aligned} ans &=n! - |A_1 \cup A_2 \cup \dots \cup A_n |\\ &= n! - \sum |A_{\{i\}}| + \sum |A_{\{i,j\}}| - \sum |A_{\{i,j,k\}}| + \dots \\ &= n! - \binom{n}{{}1} (n-1)! + \binom{n}{2}(n-2)! - \binom{n}{3}(n-3)! +\dots \\ &= \sum \limits _{i=2} ^n \binom{n}{i}(-1)^i(n-i)! \end{aligned} ans=n!−∣A1∪A2∪⋯∪An∣=n!−∑∣A{i}∣+∑∣A{i,j}∣−∑∣A{i,j,k}∣+…=n!−(1n)(n−1)!+(2n)(n−2)!−(3n)(n−3)!+…=i=2∑n(in)(−1)i(n−i)!
2.2 DAG 计数
计算有 n n n 个点的有向无环图(可以不连通)的个数。
2.2.1 做法
有向无环图中,必有至少一个点入度为 0 0 0。
令 A x A_x Ax 为 i ∈ x ∣ i n ( i ) = 0 i \in x | in(i)= 0 i∈x∣in(i)=0 的图的集合( i n ( x ) in(x) in(x) 表示 x x x 的入度), B x B_x Bx 为 ∑ A i ( ∣ i ∣ = x ) \sum A_i \space (|i| = x) ∑Ai (∣i∣=x), f ( n ) f(n) f(n) 为题目所求,
则
f ( n ) = ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ = ∑ i = 1 n ( − 1 ) i − 1 C n i B i \begin{aligned} f(n) &= |A_1 \cup A_2 \cup \dots \cup A_n|\\ &= \sum \limits _{i=1} ^n (-1) ^ {i-1} C _{n} ^i B_i \end{aligned} f(n)=∣A1∪A2∪⋯∪An∣=i=1∑n(−1)i−1CniBi
考虑有 i i i 个点入度为 0 0 0 的情况,将整个图分为入度为 0 0 0 的点和其他点两部分,那么只需要考虑这两部分相连的情况,所以
B i = 2 i ( n − i ) f ( n − i ) B_i = 2 ^{i(n-i)} f(n-i) Bi=2i(n−i)f(n−i)
代入上面的式子就可以得出
f ( n ) = ∑ i = 1 n ( − 1 ) i − 1 C n i 2 i ( n − i ) f ( n − i ) f(n)=\sum \limits _{i=1} ^n (-1) ^{i-1} C_n ^i 2^{i(n-i)}f(n-i) f(n)=i=1∑n(−1)i−1Cni2i(n−i)f(n−i)
直接递推求解。
3 例题
3.1 CF585E
3.1.1 题意
给定一个整数序列 A 1 , 2 , … , n A_{1,2,\dots,n} A1,2,…,n,求:在序列中选出一个集合包含若干个 gcd ≠ 1 \gcd \neq 1 gcd=1 的数,再在剩下的数中选一个数 A y A_y Ay 使得 A y A_y Ay 与之前选出的集合中所有数互质的方案数。
n ≤ 5 × 1 0 5 , A i ∈ [ 2 , 1 0 7 ] n \leq 5\times10^5,A_i \in [2,10^7] n≤5×105,Ai∈[2,107]。
3.1.2 解法
1 考虑只选一些数使得 gcd ≠ 1 \text{gcd} \neq 1 gcd=1。
令 c n t [ x ] cnt[x] cnt[x] 表示序列 A A A 中 x x x 的倍数的个数, B x B_x Bx 表示选出的数集满足 x ∣ gcd x|\gcd x∣gcd 的方案集合。
显然 ∣ B x ∣ = 2 c n t [ x ] − 1 |B_x|=2^{cnt[x]}-1 ∣Bx∣=2cnt[x]−1(不能选空集,所有数取或不取)且 B i j ∈ B i ∪ B j B_{ij} \in B_i \cup B_j Bij∈Bi∪Bj, B i ∩ B j = B i j B_i \cap B_j = B_{ij} Bi∩Bj=Bij。
所以有
a n s = ∣ B 2 ∪ B 3 ∪ B 4 ∪ ⋯ ∪ B i n f ∣ = ∣ B 2 ∪ B 3 ∪ B 5 ∪ B 7 ∪ ⋯ ∪ B P l a s t ∣ = ∑ ∣ B P i ∣ − ∑ ∣ B P i P j ∣ + ∑ ∣ B P i P j P k ∣ − … = ∑ x = 2 i n f μ ( x ) ∣ B x ∣ = ∑ x = 2 i n f μ ( x ) ( 2 c n t [ x ] − 1 ) \begin{aligned} ans &= |B_2 \cup B_3 \cup B_4 \cup \dots \cup B_{inf}|\\ &= |B_2 \cup B_3 \cup B_5 \cup B_7 \cup \dots \cup B_{P_{last}}|\\ &= \sum |B_{P_i}| - \sum |B_{P_i P_j}| + \sum |B_{P_i P_j P_k}| - \dots\\ &= \sum \limits _{x=2} ^{inf} \mu (x) |B_x|\\ &= \sum \limits _{x=2} ^{inf} \mu (x) (2 ^{cnt[x]} - 1) \end{aligned} ans=∣B2∪B3∪B4∪⋯∪Binf∣=∣B2∪B3∪B5∪B7∪⋯∪BPlast∣=∑∣BPi∣−∑∣BPiPj∣+∑∣BPiPjPk∣−…=x=2∑infμ(x)∣Bx∣=x=2∑infμ(x)(2cnt[x]−1)
( μ ( x ) \mu (x) μ(x) 是莫比乌斯函数)
2 考虑先选出一个数,再选出符合条件的数的集合。
令 G A i G_{A_i} GAi 表示在除 A i A_i Ai 以外的数中,选出的数集满足 gcd ∣ A i \gcd | A_i gcd∣Ai 的个数。
设此时的方案数为 r e s res res,则
r e s = ∑ i = 1 n ( a n s − ∣ G A i ∣ ) ∣ G A i ∣ = ∑ x ∣ A i μ ( x ) ∣ B x ∣ res = \sum \limits _{i=1 } ^n (ans - |G_{A_i}|)\\ |G_{A_i}| = \sum \limits _{x|A_i} \mu (x) |B_x| res=i=1∑n(ans−∣GAi∣)∣GAi∣=x∣Ai∑μ(x)∣Bx∣
所以
r e s = ∑ i = 1 n a n s − ∑ i = 1 n ∣ G A i ∣ = n ∑ i = 2 i n f μ ( x ) ∣ B x ∣ − ∑ i = 1 n ∑ x > 1 & x ∣ A i μ ( x ) ∣ B x ∣ = n ∑ i = 2 i n f μ ( x ) ∣ B x ∣ − ∑ x = 2 i n f ∑ ∀ i : x ∣ A i μ ( x ) ∣ B x ∣ = ∑ i = 2 i n f μ ( x ) ∣ B x ∣ ( n − c n t [ x ] ) = ∑ i = 2 i n f μ ( x ) ( 2 c n t [ x ] − 1 ) ( n − c n t [ x ] ) \begin {aligned} res &= \sum \limits _{i=1} ^n ans - \sum \limits _{i=1} ^n |G_{A_i}|\\ &= n \sum \limits _{i=2} ^{inf} \mu (x)|B_x| - \sum \limits _{i=1} ^n \sum \limits _{x > 1 \& x | A_i} \mu (x)|B_x|\\ &= n \sum \limits _{i=2} ^{inf} \mu (x)|B_x| - \sum \limits _{x=2} ^{inf} \sum \limits _{\forall i :x |A_i} \mu (x) |B_x|\\ &= \sum \limits _{i=2} ^{inf} \mu (x) |B_x| (n - cnt[x])\\ &= \sum \limits _{i=2} ^{inf} \mu (x) (2 ^{cnt[x]} - 1) (n - cnt[x]) \end {aligned} res=i=1∑nans−i=1∑n∣GAi∣=ni=2∑infμ(x)∣Bx∣−i=1∑nx>1&x∣Ai∑μ(x)∣Bx∣=ni=2∑infμ(x)∣Bx∣−x=2∑inf∀i:x∣Ai∑μ(x)∣Bx∣=i=2∑infμ(x)∣Bx∣(n−cnt[x])=i=2∑infμ(x)(2cnt[x]−1)(n−cnt[x])
直接递推求解即可,时间复杂度 O ( i n f = 1 0 7 ) O(inf = 10^7) O(inf=107)。