Loading

【应用】Lagrange 反演应用

证明鸽了,所以先开始应用篇。

对于一元多项式 \(F,G\) 我们有 Lagrange 反演公式:

\[n[x^n]F^k=k[w^{-k}]G^{-n} \]

绝大多数情况我们都取 \(k=1\)

其中多项式 \(G\)\(F\) 的复合逆,即其满足 \(G(F(x))=x\)

\(1\)P2767 树的数量

计算 \(n\) 个点的 \(m\) 叉树的数量。

\(i\) 个点的 \(m\) 叉树的数量为 \(f_i\),则设其对应生成函数为 \(F(x)=\sum\limits_i f_ix^i\)

利用简单的生成函数知识可以得到 \(F=x\sum\limits_{i}\binom{m}{i}F^i=x(1+F)^m\)

我们利用该式 \(F=x(1+F)^m\) 求得其复合逆 \(G(w)\)(注意我们无需求得 \(F\) 的封闭形式)

不难发现 \(G=\frac{w}{(1+w)^m}\),此时 \(G(F)=\frac{F}{(1+F)^m}=\frac{x(1+F)^m}{(1+F)^m}=x\)

那么取 \(k=1\),则有对应的 Lagrange 反演:

\[[x^n]F=\frac{[w^{-1}]w^{-n}(1+w)^{nm}}{n}=\frac{[w^{n-1}](1+w)^{nm}}{n}=\frac{\binom{nm}{n-1}}{n} \]

刚才我们所涉及的都是对一元函数的 Lagrange 反演。

那么我们如果想对二元函数 \(F(x,y)=\sum\limits_{i,j}f_{i,j}x^iy^j\) 的其中一维(\(x\))反演,应该怎么办呢?

考虑将一个二元函数看做一个一元函数,将一元多项式中 \(x\) 的系数转变为一个关于 \(y\) 的多项式,即 \(F(x)=\sum\limits_i(\sum\limits_jf_{i,j}y^j)x^i\)

这样我们再对其应用 Lagrange 反演公式时,左式和右式相等就是两个多项式的相等而非先前系数的相等。

例 2:P3978 [TJOI2015]概率论

求有根二叉树叶子结点个数期望。

考虑把期望化为总和除以个数,后者显然是卡特兰数,那么我们只需要推出前者即可。

不难发现我们就需要设计一个二元生成函数 \(F(x,y)=\sum f_{i,j}x^iy^j\),一元(\(x\))表示此时节点个数,一元(\(y\))表示此时叶子节点个数。

\(F\) 的转移式我们也不难推出,即 \(F=x(y+2F+F^2)\),由此解得 \(G=\frac{w}{y+2w+w^2}\)

还是应用 Lagrange 反演公式,可得当节点数为 \(n\) 时,叶子结点个数的生成函数 \(H(y)\)

\[H(y)=[x^n]F=\frac{[w^{-1}]G^{-n}}{n}=\frac{[w^{n-1}](y+2w+w^2)^n}{n} \]

我们要求什么?不难发现最终我们求的答案等于 \(H'(1)\)(因为求导之后先前只作为方案数的系数便会叶子结点的个数本身,而带入 \(y=1\) 能够求得所有系数之和)。

\(\frac{[w^{n-1}](y+2w+w^2)^n}{n}\) 求关于 \(y\) 的偏导数,再带入 \(y=1\) 可得 \([w^{n-1}](1+w)^{2n-2}=\binom{2n-2}{n-1}\)

最终答案为 \(\frac{\binom{2n-2}{n-1}(n+1)}{\binom{2n}{n}}=\frac{n(n+1)}{4n-2}\)

例 3:P7592 数树(2021 CoE-II E)

题意复杂,建议直接看原题。

还是考虑期望转化为总和除以方案。

先求方案,设 \(i\) 个点的树的个数为 \(f_i\),设其对应的生成函数 \(F(x)=\sum\limits_if_ix^i\)

可以很轻松的得到 \(F=x(1+F^{k_1}+F^{k_2})\)

那么 \(G\) 也将很自然得得出,显然其为 \(G=\frac{w}{1+w^{k_1}+w^{k_2}}\)

然后就还是拉反:

\[[x^n]F=\frac{[w^{-1}]G^{-n}}{n}=\frac{[w^{n-1}](1+w^{k_1}+w^{k_2})^n}{n} \]

我测,好像套不了二项式定理啊。。。

看一下数据范围,允许 \(O(n)\),那就用笨方法!

我们人为枚举 \(w^{n-1}\) 的组成中有多少个 \(w^{k_1}\),设有 \(i\) 个,那么我们根据我们当前所枚举的东西可以直接推出 \(w^{k_2}\) 有多少个,即 \(j=\frac{n-1-ik_1}{k_2}\) 个(\(j\) 如果不是整数就是不合法的),由此可以得到其对于一个合法的 \(i\) 而言,其方案数为 \(\binom{n}{i}\binom{n-i}{j}\),将这些方案数累加即得总方案数。

那么接下来总和,套路的设二元生成函数 \(F(x,y)=\sum\limits_{i,j}f_{i,j}x^iy^j\),一维表示树的大小,一维表示树的分数。

转移 \(F=x(1+y^aF^{k_1}+y^bF^{k_2})\)

复合逆 \(G=\frac{w}{1+y^aw^{k_1}+y^bw^{k_2}}\)

拉反:

\[H(y)=[x^n]F=\frac{[w^{-1}]G^{-n}}{n}=\frac{[w^{n-1}](1+y^aw^{k_1}+y^bw^{k_2})}{n} \]

\(H'(1)=[w^{n-1}](aw^{k_1}+bw^{k_2})(1+w^{k_1}+w^{k_2})^{n-1}\)

那么只需要分类一下前面是乘的是 \(aw^{k_1}\) 还是 \(bw^{k_2}\),剩下的部分仿照求方案数一样做就行了。

时间复杂度 \(O(n)\)

posted @ 2023-03-20 16:17  lstqwq  阅读(48)  评论(0编辑  收藏  举报