介绍一些简单的概念和计数题
考虑一类组合对象组成的集合 A A A,对于集合中的每个元素 a a a定义其大小为 ∣ a ∣ |a| ∣a∣(非负整数),设大小为 n n n的元素个数为 A n A_n An(所有 A n A_n An都是有限的)。
定义
A = ∑ i = 0 ∞ A i x i A=\sum\limits_{i=0}^{\infty} A_ix^i A=i=0∑∞Aixi
为 A A A的一般生成函数。
对于带标号组合对象组成的集合 A,定义
A = ∑ i = 0 ∞ A i i ! x i A=\sum\limits_{i=0}^{\infty}\dfrac{A_i}{i!}x^i A=i=0∑∞i!Aixi
为 A A A的指数生成函数。
拼接两个对象 a , b a,b a,b:
对于一般生成函数,方案唯一。
对于指数生成函数,由于集合中元素是带标号的, a , b a,b a,b拼接起来时只需保证拼接对象内部相对标号不变,方案数为 ( ∣ a ∣ + ∣ b ∣ ) ! ∣ a ∣ ! ∣ b ∣ ! \dfrac{(|a|+|b|)!}{|a|!|b|!} ∣a∣!∣b∣!(∣a∣+∣b∣)!
普通型生成函数解决的是组合问题,而指数型生成函数解决的是排列问题。
生成序列:
s e q ( A ) = ∑ i = 0 ∞ A i = 1 1 − A seq(A)=\sum\limits_{i=0}^{\infty}A^i=\dfrac{1}{1-A} seq(A)=i=0∑∞Ai=1−A1
生成集合:
s e t ( A ) = ∑ i = 0 ∞ A i i ! = e A set(A)=\sum\limits_{i=0}^{\infty}\dfrac{A^i}{i!}=e^A set(A)=i=0∑∞i!Ai=eA
k k k轮换有 ( k − 1 ) ! (k-1)! (k−1)!个, E G F EGF EGF: ( k − 1 ) ! k ! x k = x k k \dfrac{(k-1)!}{k!}x^k=\dfrac{x^k}{k} k!(k−1)!xk=kxk
所有轮换的 E G F EGF EGF:
∑ i = 0 ∞ x i i = − ln ( 1 − x ) \sum\limits_{i=0}^{\infty} \dfrac{x^i}{i}=-\ln(1-x) i=0∑∞ixi=−ln(1−x)。
故所有置换的 E G F EGF EGF:
e − ln ( 1 − x ) = 1 1 − x e^{-\ln(1-x)}=\dfrac 1{1-x} e−ln(1−x)=1−x1。
故 n n n置换的方案数为 n ! n! n!。
例:有 ∑ i = 1 n a i \sum\limits_{i=1}^n a_i i=1∑nai种物品,体积为 i i i的物品有 a i a_i ai种。每种物品有无限个。
O ( n log n ) O(n\log n) O(nlogn)求解背包。
∏ i = 1 n ( 1 1 − x i ) a i \prod\limits_{i=1}^n(\dfrac{1}{1-x^i})^{a_i} i=1∏n(1−xi1)ai
套路转换为:
exp ( − ∑ i = 1 n a i ln ( 1 − x i ) ) \quad \exp(-\sum\limits_{i=1}^n a_i\ln(1-x^i)) exp(−i=1∑nailn(1−xi))
= exp ( ∑ i = 1 n a i ∑ j ≥ 1 x i j j ) =\exp(\sum\limits_{i=1}^n a_i\sum\limits_{j\geq 1} \dfrac{x^{ij}}j) =exp(i=1∑naij≥1∑jxij)
= exp ( ∑ j ≥ 1 1 j A ( x j ) ) =\exp(\sum\limits_{j\geq 1} \dfrac{1}jA(x^j)) =exp(j≥1∑j1A(xj))
A ( x j ) A(x^j) A(xj)只有 n j \dfrac nj jn项有用,调和级数 O ( n log n ) O(n\log n) O(nlogn)求出后做一遍 exp \exp exp即可。
给定 n n n 和数组 A A A,对于所有 m ≤ n m ≤ n m≤n,求有多少点带权二叉树,点权和为
m m m,且所有点的权值都在数组 A A A 中,两棵二叉树不同,当且仅当根节点
点权不同,或者左右子树有至少一个不同。
n ≤ 1 0 5 n ≤ 10^5 n≤105。
点的 O G F OGF OGF:
G ( x ) = ∑ i = 0 ∞ [ i ∈ A ] x i G(x)=\sum\limits_{i=0}^{\infty}[i\in A]x^i G(x)=i=0∑∞[i∈A]xi
设树的 O G F OGF OGF:
F = G F 2 + 1 F=GF^2+1 F=GF2+1。
F = 1 1 + 1 − G 2 F=\dfrac{1}{1+\sqrt{1-G^2}} F=1+1−G21
( F = 1 1 − 1 − G 2 F=\dfrac{1}{1-\sqrt{1-G^2}} F=1−1−G21在0处不收敛,舍去)
求 n n n 个点带标号的连通图个数。
n ≤ 1 0 5 n ≤ 10^5 n≤105。
无向图的 E G F EGF EGF:
G ( x ) = ∑ i = 0 ∞ 2 ( i 2 ) x i i ! G(x)=\sum\limits_{i=0}^{\infty}2^{\binom i2}\dfrac{x^i}{i!} G(x)=i=0∑∞2(2i)i!xi
简单连通图的 E G F EGF EGF:
F ( x ) = ∑ i = 0 ∞ f i x i i ! F(x)=\sum\limits_{i=0}^{\infty}f_i\dfrac{x^i}{i!} F(x)=i=0∑∞fii!xi
无向图是由若干个简单连通图拼接起来的带标号集合。
G = e F → F = ln G G=e^F\to F=\ln G G=eF→F=lnG
求 n n n个点的满足如下条件无向图个数:
任意三个点能互相到达的点 a , b , c a, b, c a,b,c, d i s ( a , b ) , d i s ( b , c ) , d i s ( a , c ) dis(a, b),dis(b, c),dis(a, c) dis(a,b),dis(b,c),dis(a,c) 不能三个
同时相等。
n ≤ 1 0 5 n ≤ 10^5 n≤105。
满足条件的无向图只有链和长度不为3的倍数的环。
链的 E G F EGF EGF:
A ( x ) = ∑ i = 0 ∞ i ! 2 x i i ! = ∑ i = 0 ∞ x i 2 A(x)=\sum\limits_{i=0}^{\infty}\dfrac{i!}{2}\dfrac{x^i}{i!}=\sum\limits_{i=0}^{\infty}\dfrac{x^i}{2} A(x)=i=0∑∞2i!i!xi=i=0∑∞2xi
环的 E G F EGF EGF:
B ( x ) = ∑ i = 0 ∞ ( ( 3 i ) ! 2 x 3 i + 1 ( 3 i + 1 ) ! + ( 3 i + 1 ) ! 2 x 3 i + 2 ( 3 i + 2 ) ! ) = ∑ i = 0 ∞ ( x 3 i + 1 6 i + 2 + x 3 i + 2 6 i + 4 ) B(x)=\sum\limits_{i=0}^{\infty}(\dfrac{(3i)!}{2}\dfrac{x^{3i+1}}{(3i+1)!}+\dfrac{(3i+1)!}{2}\dfrac{x^{3i+2}}{(3i+2)!})=\sum\limits_{i=0}^{\infty}(\dfrac{x^{3i+1}}{6i+2}+\dfrac{x^{3i+2}}{6i+4}) B(x)=i=0∑∞(2(3i)!(3i+1)!x3i+1+2(3i+1)!(3i+2)!x3i+2)=i=0∑∞(6i+2x3i+1+6i+4x3i+2)
答案 G = e A + B G=e^{A+B} G=eA+B
参考资料:
dzyo的讲义
指数型生成函数 及 多项式求ln-Mychael