【定义】
对两多项式 \(f,g\),无常数项且一次项系数非 \(0\),有:\(f(g(x))=x\iff g(f(x))=x\)。(这个结论需要用到高深的群论知识,不会)
如果 \(f(g(x))=x\),称 \(f,g\) 互为复合逆。记 \(f^{-1}\) 为 \(f\) 的复合逆。同时可以证明复合逆存在且唯一。(这个结论也不会)
注意多项式复合运算不具有交换律,但具有结合律。
直观理解复合逆。考虑 \(f\) 的图像 \(C=\{(x,y)|y=f(x)\}\),\(g\) 的图像就是 \(C\) 关于 \(y=x\) 的镜像。
拉格朗日反演:对于 \(F,G\) 互为复合逆,有:
拓展拉反:对于 \(T(F(x))=H(x)\),\(F,G\) 互为复合逆,有:
注意,结果式里没有任何有关于 \(G(x)\) 的形式,也就是使用拓展拉反,只需保证 \(F\) 存在复合逆。
可以看到,普通拉反就是拓展拉反里 \(T(x)=G(x)\) 的特殊形式。
【应用】
【例一】
\(a_0=1\),\(a_{n+1}=\sum_{i+j+k=n}a_ia_ja_k\)。求 \(a_n\) 通项公式。
这也是 \(n\) 个结点的三叉树个数(子树有序)。
令 \(A(x)\) 为 \(a\) 的 OGF。则 \(A(x)=xA^3(x)+1\)。目的是求 \([x^n]A(x)\)。
要用拉反,必先找复合逆。
定义 \(f(x)=y=A(x)-1\)。(为什么这么定义?因为右边常数项 \(1\),要把这个 \(1\) 减掉才能满足复合逆存在的要求:无常数项)
则 \(y=xA^3(x)=x(y+1)^3\Rightarrow x=\dfrac{y}{(y+1)^3}=g(y)\)。于是我们得到了 \(f(x)\) 的复合逆 \(g(y)=\dfrac{y}{(y+1)^3}\)。
那么求 \(A\) 的系数就是求 \(f\) 的系数,求 \(f\) 的系数就是求 \(g\) 的系数。
注:\(k\) 叉树个数就是 \(\frac{1}{n}{kn\choose n-1}\)。
【例二】
来源:BZOJ3684 大朋友和多叉树
给定 \(n\le 10^5\)。有集合 \(D\subseteq \mathbb{N}-\{0,1\}\) 初始给定。
求无标号子树有序有根多叉树个数,使得其叶子数为 \(n\),且非叶结点的儿子数 \(\in D\)。
记答案为 \(g_n\)。\(g_1=1\),\(g_{n+1}=\sum_{\{d_1\sim d_k\}\in D}g_{d_1}g_{d_2}\cdots g_{d_k}\)。
写出 OGF,记为 \(g(x)\)。有 \(g(x)=x+\sum_{d\in D}g^d(x)\)。目标是求 \([x^n]g(x)\)。
因为 \(g\) 的常数项为 \(0\),一次项系数为 \(1\),后面 \(\sum g^d(x)\) 因为 \(d\ge 2\) 不可能有常数项和一次项,所以 \(g\) 有复合逆。
取 \(y=g(x)\)。\(y=x+\sum_{d\in D}y^d\),所以 \(x=y-\sum_{d\in D}y^d=f(y)\) 是 \(g(x)\) 的复合逆。于是可以通过求 \(f\) 的系数得到 \(g\) 的系数。
没什么优美的形式,直接暴力快速幂、求逆。
【例三】
边双连通图计数。
图计数考虑 EGF。
记 \(C(x)\) 为 "连通图" 的 EGF,那么 "有根连通图" 的 EGF 为 \(D(x)=x\cdot C'(x)\)。
(这一部分的内容在【EGF 学习笔记】里有提)
设边双连通的 EGF 是 \(B(x)\)。
考虑边双的性质:任何一个连通图边双缩点之后得到一棵树。
于是我们对 "有根连通图个数" 算两次,解方程得到 \(B(x)\)。
-
有根连通图的 EGF 就是 \(D(x)\)。
-
任何一个有根连通图都可以进行边双缩点。其根必然位于一个边双内。设根所在的边双大小为 \(n\),这一部分方案数的 EGF 是 \(B(x)\)。(\(n\) 大小的边双个数)
然后把这张图除去根所在边双,会剩下若干个有根连通图。注意不是剩下若干个边双,是剩下若干个边双子树。有根是因为要决定哪个点和根所在边双相连。
"有根连通图" 的 EGF 是 \(D(x)\),然后还要决定和根所在边双里哪个点相连,再乘 \(n\)。
所以一颗子树方案数的 EGF 是 \(nD(x)\),因为可以有若干颗子树,决定所有子树的方案数的 EGF 就是 \(\exp (nD(x))\)。
所以 \(D(x)=\sum_{n\ge 1}\frac{b_n\exp(nD(x))}{n!}x^n=B(x\cdot \exp(D(x)))\)。
令 \(F(x)=x\cdot \exp(D(x))\),改写为 \(B(F(x))=D(x)\)。
因为 \(F(x)\) 是 \(x\) 的倍数,所以 \(F(x)\) 无常数项;同时因为 \(\exp(D(x))\) 常数项为 \(1\),所以 \(F(x)\) 的一次项为 \(1\),非 \(0\)。因此 \(F\) 存在复合逆,可以使用拉格朗日反演。
根据拓展拉反:
到这里可以直接做了。当然,也有另一种处理方式: