<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Generating Functions |</title><link>https://sichen-wang.github.io/tags/generating-functions/</link><atom:link href="https://sichen-wang.github.io/tags/generating-functions/index.xml" rel="self" type="application/rss+xml"/><description>Generating Functions</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sat, 24 Jun 2023 11:00:56 +0000</lastBuildDate><image><url>https://sichen-wang.github.io/media/icon_hu_9dfcb674aa885f38.png</url><title>Generating Functions</title><link>https://sichen-wang.github.io/tags/generating-functions/</link></image><item><title>生成函数</title><link>https://sichen-wang.github.io/blog/%E7%94%9F%E6%88%90%E5%87%BD%E6%95%B0/</link><pubDate>Sat, 24 Jun 2023 11:00:56 +0000</pubDate><guid>https://sichen-wang.github.io/blog/%E7%94%9F%E6%88%90%E5%87%BD%E6%95%B0/</guid><description>&lt;h2 id="普通生成函数"&gt;普通生成函数&lt;/h2&gt;
&lt;p&gt;序列 \(a\) 的普通生成函数 \(\rm(Ordinary\ Generating\ Function,OGF)\) 被定义为形式幂级数 ：&lt;/p&gt;
\[
F(x) = \sum _n a_n x ^ n \tag{1.0.1}
\]&lt;p&gt;\(a\) 既可以是有穷序列也可以是无穷序列，\(x\) 不具有实际意义，仅作为一个形式上的变量参与运算。&lt;/p&gt;
&lt;h3 id="两种基本形式"&gt;两种基本形式&lt;/h3&gt;
&lt;h4 id="加法与乘法"&gt;加法与乘法&lt;/h4&gt;
&lt;p&gt;假设两个序列 \(a,b\) 的 \(\rm OGF\) 分别为 \(F(x),G(x)\)。&lt;/p&gt;
&lt;p&gt;加减不必多说 ：&lt;/p&gt;
\[
F(x) \pm G(x) = \sum _n (a_n \pm b_n) x ^ n \tag{1.1.1}
\]&lt;p&gt;乘法用卷积定义 ：&lt;/p&gt;
\[
F(x)G(x) = \sum _n x ^ n \sum _{i = 0} ^n a_ib_{n - i} \tag{1.1.2}
\]&lt;h4 id="封闭形式"&gt;封闭形式&lt;/h4&gt;
&lt;p&gt;在使用生成函数的过程中，我们不会一直使用形式幂级数形式，有时候会为了计算方便将其替换成封闭形式。&lt;/p&gt;
&lt;p&gt;\(F(x) = \sum_{n} x^{n}\)&lt;/p&gt;
\[
F(x) - xF(x) = 1
\]\[
F(x) = \frac{1}{1 - x} \tag{1.2.1}
\]&lt;p&gt;\(F(x) = \sum_{n} q^{n} x^{n}\)&lt;/p&gt;
\[
F(x) - qxF(x) = 1
\]\[
F(x) = \frac{1}{1 - qx} \tag{1.2.2}
\]&lt;p&gt;\(F(x) = \sum_{n} (n + 1)x^{n}\)&lt;/p&gt;
\[
\begin{aligned}
F(x) &amp;= \sum _{n \geqslant 1} nx ^ {n - 1}\\
&amp;= \sum _ {n} (x ^ n)'\\
&amp;= \left(\frac{1}{1 - x}\right)'
\end{aligned}
\]\[
F(x) = \frac{1}{(1 - x) ^ 2} \tag{1.2.3}
\]&lt;p&gt;\(F(x) = \sum_{n} \binom{m}{n} x^{n}\)&lt;/p&gt;
\[
F(x) = (1 + x) ^ m \tag{1.2.4}
\]&lt;p&gt;\(F(x) = \sum_{n} \binom{n + m}{n} x^{n}\)&lt;/p&gt;
\[
F(x) = \frac{1}{(1 - x) ^ {m + 1}} \tag{1.2.5}
\]&lt;p&gt;考虑归纳证明 ：&lt;/p&gt;
&lt;p&gt;显然当 \(m = 0\) 时，有 \(F(x) = \sum_{n} \binom{n}{n} x^{n} = \frac{1}{1 - x}\)。&lt;/p&gt;
&lt;p&gt;当 \(m \gt 0\) 时 ：&lt;/p&gt;
\[
\begin{aligned}
\frac{1}{(1 - x) ^ {m + 1}} &amp;= \frac{1}{(1 - x) ^ m}\frac{1}{1 - x}\\
&amp;= \left[\sum _ n \dbinom{m + n - 1}{n} x ^ n\right] \left(\sum _n x ^ n\right)\\
&amp;= \sum _ n x ^ n \sum _ {i = 0} ^ n \dbinom{m + i - 1}{i}\\
&amp;= \sum _ n \dbinom{m + n}{n} x ^ n
\end{aligned}
\]&lt;p&gt;关于上述推导过程中最后一步用到的组合恒等式 ：&lt;/p&gt;
\[
\sum _ {i = 0} ^ n \dbinom{m + i - 1}{i} = \dbinom{m + n}{n} \tag{1.2.6}
\]&lt;p&gt;考虑其组合意义，左边相当于将 \(i\) 个无标号石子放进 \(m\) 个有标号盒子里，盒子允许为空的方案数。&lt;/p&gt;
&lt;p&gt;考虑将 \(n\) 个石子放进 \(m + 1\) 个盒子中的方案数，规则同上，显然方案数为 \(\binom{m + n}{n}\)。 假设从 \(m + 1\) 个盒子中取出一个，枚举要将 \(n\) 个石子中的多少个放入剩下的 \(m\) 个盒子中，剩余的石子就只能放进取出的盒子中了，则方案数为 \(\sum_{i = 0}^{n} \binom{m + i - 1}{i}\)。 故组合恒等式 \((1.2.6)\) 得证。&lt;/p&gt;
&lt;p&gt;还有另一种仅通过组合意义证明式 \((1.2.5)\) 的方法 ：&lt;/p&gt;
&lt;p&gt;可以发现 \(\frac{1}{(1 - x)^{m + 1}} = \left(\frac{1}{1 - x}\right)^{m + 1}\)，相当于将初始仅有 \(a_{0} = 1\) 的序列做了 \(m + 1\) 遍前缀和。又因为每做一遍前缀和的组合意义是一个位置可以走到任意一个不在自己左边的位置，所以实际上 \(\frac{1}{(1 - x)^{m + 1}}\) 的第 \(n\) 项系数即为从 \(0\) 开始，每次向右走非负整数步，走 \(m + 1\) 步到达 \(n\) 的方案数。归约到一个更加经典的问题，就是不定方程 \(\sum_{i = 1}^{m + 1} x_{i} = n\) 的非负整数解数量，众所周知，其值为 \(\binom{m + n}{n}\)。&lt;/p&gt;
&lt;h4 id="部分分式定理"&gt;部分分式定理&lt;/h4&gt;
&lt;p&gt;在上文中，我们已经知道了形如 \(F(x) = \frac{1}{(1 - qx)^{m}}\) 的部分分式可以简单地被转换为形式幂级数形式，于是我们想找到一种方法能够将形如 \(\frac{P(x)}{Q(x)}\) 的一般分式拆成若干个部分分式之和。&lt;/p&gt;
&lt;p&gt;部分分式定理指出，如果 \(\deg P \lt \deg Q\)，那么可以先将 \(Q(x)\) 因式分解，然后使用待定系数法构造若干个形如 \(\frac{A}{(1 - ax)^{p}}\) 的式子，使它们的和为 \(\frac{P(x)}{Q(x)}\)。&lt;/p&gt;
&lt;p&gt;例如 \(F(x) = \frac{P(x)}{(x - 1)^{2} (x + 2)}\)，那么构造 \(\frac{A}{x - 1} + \frac{B}{(x - 1)^{2}} + \frac{C}{x + 2} = \frac{P(x)}{(x - 1)^{2} (x + 2)}\)。&lt;/p&gt;
&lt;h3 id="两个经典数列的生成函数"&gt;两个经典数列的生成函数&lt;/h3&gt;
&lt;h4 id="斐波那契数列"&gt;斐波那契数列&lt;/h4&gt;
&lt;p&gt;斐波那契数列 \(\rm(Fibonacci\ Sequence)\) 被定义为 \(a_{0} = 0, a_{1} = 1,a_{n} = a_{n - 1} + a_{n - 2}(n \gt 1)\)。&lt;/p&gt;
&lt;p&gt;设 \(F(x) = \sum_{n} a_{n} x^{n}\)，显然有 ：&lt;/p&gt;
\[
F(x) = xF(x) + x ^ 2 F(x) - a_0x + a_1x + a_0
\]&lt;p&gt;解得 ：&lt;/p&gt;
\[
F(x) = \frac{x}{1 - x - x ^ 2} \tag{1.3.1}
\]&lt;p&gt;考虑使用部分分式定理，观察到分母多项式次数为 \(2\)，那么设 ：&lt;/p&gt;
\[
\frac{A}{1 - ax} + \frac{B}{1 - bx} = \frac{x}{1 - x - x ^ 2}
\]&lt;p&gt;解得 ：&lt;/p&gt;
\[
\begin{aligned}
F(x) &amp;= \frac{x}{1 - x - x ^ 2}\\
&amp;= \frac{\frac{\sqrt{5}}{5}}{1 - \frac{1 + \sqrt{5}}{2}x} + \frac{-\frac{\sqrt{5}}{5}}{1 - \frac{1 - \sqrt{5}}{2}x}\\
&amp;= \sum _ n x ^ n \frac{\sqrt{5}}{5}\left[\left(\frac{1 + \sqrt{5}}{2}\right) ^ n - \left(\frac{1 - \sqrt{5}}{2}\right) ^ n\right]
\end{aligned}
\]&lt;p&gt;于是上式即为斐波那契数列的形式幂级数形式和通项。&lt;/p&gt;
&lt;h4 id="卡特兰数"&gt;卡特兰数&lt;/h4&gt;
&lt;p&gt;首先引入牛顿二项式定理。&lt;/p&gt;
&lt;p&gt;让我们重定义组合数的运算 ：&lt;/p&gt;
\[
\dbinom{r}{k} = \frac{r ^ {\underline{k}}}{k!}~~(r \in \mathbb{C}, k \in \mathbb{N}) \tag{1.3.3}
\]&lt;p&gt;在这种情况下，对于 \(\alpha \in \mathbb{C}\)，有 ：&lt;/p&gt;
\[
(1 + x) ^ {\alpha} = \sum _n \dbinom{\alpha}{n} x ^ n \tag{1.3.4}
\]&lt;p&gt;对于卡特兰数序列，令 \(a_{0} = a_{1} = 1, a_{n} = \sum\limits_{i = 0}^{n - 1} a_{i} \times a_{n - i - 1}(n \gt 1)\)&lt;/p&gt;
&lt;p&gt;令其 \(\rm OGF\) 为 \(F(x) = \sum\limits_{n} a^{n} x^{n}\)。&lt;/p&gt;
&lt;p&gt;不难发现其递推式是一个卷积的形式，于是有：&lt;/p&gt;
\[
xF ^ 2(x) + 1 = F(x)
\]&lt;p&gt;解之得：&lt;/p&gt;
\[
F(x) = \frac{1 \pm \sqrt{1 - 4x}}{2x} \tag{1.3.5}
\]&lt;p&gt;要保留哪个根呢？&lt;/p&gt;
&lt;p&gt;求解上式在 \(x \to 0\) 时的极限可以发现，当 \(F(x) = \dfrac{1 + \sqrt{1 - 4x}}{2x}\) 时不收敛。&lt;/p&gt;
&lt;p&gt;原因是：&lt;/p&gt;
\[
F(x) = \dfrac{1 + \sqrt{1 - 4x}}{2x} = \frac{2}{1 - \sqrt{1 - 4x}}
\]&lt;p&gt;则有：&lt;/p&gt;
\[
\lim\limits_{x \to 0 ^ {+}} \frac{2}{1 - \sqrt{1 - 4x}} = \infty
\]\[
\lim\limits_{x \to 0 ^ {-}} \frac{2}{1 - \sqrt{1 - 4x}} = -\infty
\]&lt;p&gt;故此时 \(x \to 0\) 时极限不存在。&lt;/p&gt;
&lt;p&gt;因此可以得到：&lt;/p&gt;
\[
F(x) = \dfrac{1 - \sqrt{1 - 4x}}{2x} \tag{1.3.6}
\]&lt;p&gt;将分子部分单独拿出来考虑，令 \(G(x) = 1 - \sqrt{1 - 4x} = 1 - (1 - 4x)^{\frac{1}{2}}\)，使用牛顿二项式定理展开：&lt;/p&gt;
\[
\begin{aligned}
G(x) &amp;= 1 - \sum\limits_{n \geqslant 0} \dbinom{\frac{1}{2}}{n} (-4x) ^ n \\
&amp;= 1 - \sum\limits_{n \geqslant 0} \frac{\frac{1}{2} ^ {\underline n}}{n!} (-4x) ^ n \\
&amp;= 1 - \sum\limits_{n \geqslant 0} \frac{\frac{1}{2} \times (-\frac{1}{2}) \times (-\frac{3}{2}) \times \cdots \times (-\frac{2n - 3}{2})}{n!} (-4x) ^ n \\
\end{aligned}
\]&lt;p&gt;特别要注意的是 \(\binom{\frac{1}{2}}{0} = \frac{\frac{1}{2}^{0}}{0!} = 1\) 但是用上面那个式子是不正确的，因此需要特别考虑：&lt;/p&gt;
\[
\begin{aligned}
G(x) &amp;= \sum\limits_{n \geqslant 1} (-1) ^ {2n - 1} \frac{(2n - 3)!!}{n!2 ^ n} (4x) ^ n \\
&amp;= \sum\limits_{n \geqslant 1} \frac{(2n - 2)!}{n!(2n - 2)!!2 ^ n} (4x) ^ n \\
&amp;= \sum\limits_{n \geqslant 1} \frac{2(2n - 2)!}{n!(n - 1)!} x ^ n \\
&amp;= \sum\limits_{n \geqslant 1} \frac{\binom{2n - 1}{n}}{2n - 1} 2x ^ n
\end{aligned}
\]&lt;p&gt;带回原式有：&lt;/p&gt;
\[
\begin{aligned}
F(x) &amp;= \frac{\sum\limits_{n \geqslant 1} \frac{\binom{2n - 1}{n}}{2n - 1} 2x ^ n}{2x} \\
&amp;= \sum\limits_{n \geqslant 0} \frac{\binom{2n + 1}{n + 1}}{2n + 1} x ^ n \\
&amp;= \sum\limits_{n \geqslant 0} \frac{\binom{2n}{n}}{n + 1} x ^ n
\end{aligned}
\tag{1.3.9}
\]&lt;p&gt;因此可知 \(a_{n} = \dfrac{\binom{2n}{n}}{n + 1}\)。&lt;/p&gt;
&lt;h3 id="欧拉变换"&gt;欧拉变换&lt;/h3&gt;
&lt;p&gt;考虑求解形如下式的 \(\rm OGF\) ：&lt;/p&gt;
\[
F_i(x) = \left(\sum _ j x ^ {ji}\right) ^ {f _ i} = \left(\frac{1}{1 - x ^ i}\right) ^ {f _ i} \tag{2.3.1}
\]\[
\varepsilon\circ F(x) = \prod _ i F_i(x) = \prod _ i \left(\frac{1}{1 - x ^ i}\right) ^ {f _ i} \tag{2.3.2}
\]&lt;p&gt;这个 \(\rm OGF\) 的组合意义是将 \(n\) 个互不区分的小球分进若干个非空集合，大小为 \(i\) 的集合有 \(f_{i}\) 种方案的总方案数。&lt;/p&gt;
&lt;p&gt;注意到式 \((2.3.2)\) 右边是连乘，于是对其取 \(\ln :\)&lt;/p&gt;
\[
\begin{aligned}
\ln \varepsilon \circ F(x) &amp;= \sum _ i \ln \left(\frac{1}{1 - x ^ i}\right) ^ {f _ i}\\
&amp;= \sum _ i f_i \times \ln\left(\frac{1}{1 - x ^ i}\right)\\
&amp;= -\sum _ i f_i \times \ln (1 - x ^ i)\\
&amp;= \sum _ i \sum _ j \frac{f_i}{j + 1} x ^ {i(j + 1)}
\end{aligned}
\]&lt;p&gt;关于上式中化简 \(\ln (1 - x^{i})\) 的步骤可以参考后文中式 \((2.1.5)\)。&lt;/p&gt;
&lt;p&gt;由于我们一般只需求生成函数的前 \(n\) 项，观察到 \(i\) 和 \(j\) 的枚举构成了调和级数的关系，可以直接暴力计算。&lt;/p&gt;
&lt;p&gt;最后将求出的幂级数 \(\rm exp\) 回去即可得到 \(\varepsilon \circ F(x)\)。&lt;/p&gt;
&lt;p&gt;时间复杂度 \(\Theta(n \log n)\)。&lt;/p&gt;
&lt;h2 id="指数型生成函数"&gt;指数型生成函数&lt;/h2&gt;
&lt;p&gt;序列 \(a\) 的指数型生成函数 \(\rm(Exponential\ Generating\ Function,EGF)\) 被定义为形式幂级数 ：&lt;/p&gt;
\[
\hat{F}(x) = \sum _n a_n \frac{x ^ n}{n!}\tag{2.0.1}
\]&lt;h3 id="两种基本形式-1"&gt;两种基本形式&lt;/h3&gt;
&lt;h4 id="加法与乘法-1"&gt;加法与乘法&lt;/h4&gt;
&lt;p&gt;形式幂级数形式的加减法与 \(\rm OGF\) 基本相同，也是对应系数相加。&lt;/p&gt;
&lt;p&gt;乘法被定义为 ：&lt;/p&gt;
\[
\begin{aligned}
\hat{F}(x)\hat{G}(x) &amp;= \sum _ i a _ i \frac{x ^ i}{i!} \sum _ j b _ j \frac{x ^ j}{j!}\\
&amp;= \sum _ n x ^ n \sum _ {i = 0} ^ n a _ i b _ {n - i} \frac{1}{i!(n - i)!}\\
&amp;= \sum _ n \frac{x ^ n}{n!} \sum _ {i = 0} ^ n\dbinom{n}{i} a _ i b _ {n - i}
\end{aligned}
\]&lt;h4 id="麦克劳林级数"&gt;麦克劳林级数&lt;/h4&gt;
&lt;p&gt;众所周知有泰勒展开 ：&lt;/p&gt;
\[
F(x) = \sum _ n \frac{F^{(n)}(x _ 0)}{n!}(x - x _ 0) ^ n \tag{2.1.2}
\]&lt;p&gt;取 \(x_{0} = 0\) 时的特殊情况可以得到麦克劳林级数 ：&lt;/p&gt;
\[
F(x) = \sum _ n F^{(n)}(0)\frac{x ^ n}{n!} \tag{2.1.3}
\]&lt;p&gt;有 \(\exp(0) = 1\)，故 \(e^{x}\) 的 \(\rm EGF\) 为 ：&lt;/p&gt;
\[
\hat{\exp}(x) = \sum _ n \frac{x ^ n}{n!} \tag{2.1.4}
\]&lt;h4 id="常见幂级数的封闭形式"&gt;常见幂级数的封闭形式&lt;/h4&gt;
\[
\begin{aligned}
e ^ {qx} &amp;= \sum _ n q ^ n \frac{x ^ n}{n!}\\
\frac{e^{x}+e^{-x}}{2}&amp;=\sum_{n}\frac{x^{2 n}}{(2 n) !} \\
\frac{e^{x}-e^{-x}}{2}&amp;=\sum_{n}\frac{x^{2 n+1}}{(2 n+1) !} \\
\ln (1-x)&amp;=-\sum_{n} \frac{x ^ {n + 1}}{n + 1}\\
\ln (1+x)&amp;=\sum_{n}(-1)^{n} \frac{x^{n+1}}{n+1} \\
(1+x)^{\alpha}&amp;=\sum_{n} \alpha^{\underline{n}} \frac{x^{n}}{n !}
\end{aligned}
\]&lt;h3 id="组合意义"&gt;组合意义&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;结论：设 \(\hat{G}(x)\) 表示集合内部分配方案数关于集合大小的 \(\rm EGF\)，\(\hat{F}(x)\) 表示将问题划分成若干个无标号非空子问题，子问题的方案数为 \(\hat{G}(x)\) 的关于问题总规模的方案数的 \(\rm EGF\)。那么有关系式 ：&lt;/strong&gt;&lt;/p&gt;
\[
\hat{F}(x) = \exp \hat{G}(x) \tag{2.2.1}
\]&lt;p&gt;考虑证明上述结论，设 \(f_{i, j}\) 表示将 \(j\) 个&lt;strong&gt;有标号&lt;/strong&gt;小球放进 \(i\) 个&lt;strong&gt;有标号&lt;/strong&gt;盒子中的方案数，\(g_{i}\) 表示集合内有 \(i\) 个元素的方案数，显然有 ：&lt;/p&gt;
\[
f_{i, j} = \sum _{k = 1} ^ {j - i + 1} \dbinom{j}{k} f_{i - 1, j - k} \times g_k
\]&lt;p&gt;考虑到 \(f_{i - 1, j - k}\) 在 \(k \gt j - i + 1\) 时的值为 \(0\)，所以可以将 \(k\) 的枚举上界换成 \(j\)，发现有 ：&lt;/p&gt;
\[
\hat{F}_i(x) = \hat{F}_{i - 1}(x)\hat{G}(x)
\]&lt;p&gt;化简得到并根据 \(\hat{F}_{i}(x)\) 的定义得到 ：&lt;/p&gt;
\[
\hat{F}_i(x) = \sum _ j f_{i, j} \frac{x ^ j}{j!} = \hat{G}^i(x) \tag{2.2.2}
\]&lt;p&gt;于是有 ：&lt;/p&gt;
\[
\begin{aligned}
\exp \hat{G}(x) &amp;= \sum_n \frac{\hat{G}^n(x)}{n!}\\
&amp;= \sum _ n \frac{1}{n!} \sum _ i f_{n, i} \frac{x ^ i}{i!}\\
&amp;= \sum _ i \left(\sum _ n \frac{f _ {n, i}}{n!}\right) \frac{x ^ i}{i!}
\end{aligned}
\]&lt;p&gt;这恰好对应了 \(\hat{F}(x)\) 的定义，于是 \(\hat{F}(x) = \exp \hat{G}(x)\)。&lt;/p&gt;</description></item><item><title>生成函数强化训练</title><link>https://sichen-wang.github.io/blog/%E7%94%9F%E6%88%90%E5%87%BD%E6%95%B0%E5%BC%BA%E5%8C%96%E8%AE%AD%E7%BB%83/</link><pubDate>Sat, 24 Jun 2023 11:00:56 +0000</pubDate><guid>https://sichen-wang.github.io/blog/%E7%94%9F%E6%88%90%E5%87%BD%E6%95%B0%E5%BC%BA%E5%8C%96%E8%AE%AD%E7%BB%83/</guid><description>&lt;h1 id="heading"&gt;
&lt;/h1&gt;
&lt;p&gt;考虑 \(\rm EGF\) 的组合意义，可以发现若设任意图方案数的 \(\rm EGF\) 为 \(F(x)\)，连通图的 \(\rm EGF\) 为 \(G(x)\)，显然任意图计数可以被看做先将 \(n\) 个点分进若干个非空子集，然后做连通图计数的方案数，那么根据之前的结论，有 ：&lt;/p&gt;
\[
F(x) = \exp G(x) \iff G(x) = \ln F(x)
\]&lt;p&gt;显然有 \(F(x) = \sum_{n} 2^{\binom{n}{2}} x^{n}\)，于是只需直接对其求 \(\ln\) 即可。&lt;/p&gt;
&lt;p&gt;时间复杂度 \(\Theta(n \log n).\)&lt;/p&gt;
&lt;h2 id="code-link"&gt;
&lt;/h2&gt;
&lt;h1 id="heading-1"&gt;
&lt;/h1&gt;
&lt;p&gt;首先可以考虑一个 \(\rm DP\)，设 \(f_{S}\) 表示点权之和为 \(S\) 的二叉树数量，迭代时可以考虑枚举左子树的权值和 \(S_{l}\)，右子树的权值和 \(S_{r}\) 和根节点的权值 \(w\)，那么有 \(f_{S_{l} + S_{r} + w} = \sum_{S_{l}} \sum_{S_{r}} \sum_{w \in C} f_{S_{l}} f_{S_{r}}.\)&lt;/p&gt;
&lt;p&gt;容易发现，这个式子可以用三个多项式的卷积来拟合，设 \(F(x) = \sum_{n} f_{n} x^{n}, G(x) = \sum_{n} [n \in C] x^{n}\)，于是有 ：&lt;/p&gt;
\[
F = F ^ 2 G + 1
\]&lt;p&gt;最后的 \(+1\) 是为了补齐常数项，因为 \(f_{0}\) 为 \(1.\)&lt;/p&gt;
&lt;p&gt;解方程可以得到 ：&lt;/p&gt;
\[
F = \frac{1 \pm \sqrt{1 - 4G}}{2G}
\]&lt;p&gt;由于有两个解，显然不可能都成立，于是考虑 \(x \to 0\) 时的特殊情况。&lt;/p&gt;
&lt;p&gt;当 \(x \to 0\) 时，\(F(x) \to 1,G(x) \to 0.\)&lt;/p&gt;
\[
\lim _ {x \to 0} \frac{1 + \sqrt{1 - 4G}}{2G} = +\infty \not= \lim _ {x \to 0} F
\]\[
\lim _ {x \to 0} \frac{1 - \sqrt{1 - 4G}}{2G} = 1 = \lim _ {x \to 0} F
\]&lt;p&gt;于是选取 \(F= \frac{1 - \sqrt{1 - 4G}}{2G}\) 作为方程的解。&lt;/p&gt;
&lt;p&gt;到这一步，我们发现一个问题，因为 \(G(x)\) 的常数项为 \(0\)，所以 \(G(x)\) 不可以求逆。&lt;/p&gt;
&lt;p&gt;考虑对解做变换，这里选取分子有理化 ：&lt;/p&gt;
\[
F = \frac{\left(1 - \sqrt{1 - 4G}\right)\left(1 + \sqrt{1 - 4G}\right)}{2G\left(1 + \sqrt{1 - 4G}\right)} = \frac{2}{1 + \sqrt{1 - 4G}}
\]&lt;p&gt;可以发现分母的常数项必定不为 \(0\)，于是做多项式开方和多项式求逆即可。&lt;/p&gt;
&lt;p&gt;时间复杂度 \(\Theta(n \log n).\)&lt;/p&gt;
&lt;h2 id="code-link-1"&gt;
&lt;/h2&gt;
&lt;h1 id="heading-2"&gt;
&lt;/h1&gt;
&lt;p&gt;设 \(\{f_{n}\},\{g_{n}\}\) 分别为斐波那契数列和答案序列，\(F(x)\) 和 \(G(x)\) 分别为它们的生成函数。&lt;/p&gt;
&lt;p&gt;显然有斐波那契数列的生成函数 ：&lt;/p&gt;
\[
F(x) = \frac{x}{1 - x - x ^ 2}
\]&lt;p&gt;而对于 \(G(x)\)，可以发现如果 \(g_{i}\) 已经被求出来了，那么给所有的拆分加上一个数 \(n - i\) 即可得到 \(g_{n}\) 的所有拆分，\(g_{i}\) 对 \(g_{n}\) 的贡献为 \(g_{i} \times f_{n - i}.\) 于是有 \(g_{n}\) 的递推式 ：&lt;/p&gt;
\[
g_n = \sum _ {i = 0} ^ {n- 1} g_i \times f_{n - i}
\]&lt;p&gt;将 \(\{g_{n}\}\) 带入 \(G(x)\) 可得 ：&lt;/p&gt;
\[
G(x) = \sum _ n x ^ n \sum _ {i = 0} ^ {n - 1} g_i f_{n - i}
\]&lt;p&gt;可以发现等式右边实际上是卷积的形式，于是有 ：&lt;/p&gt;
\[
G = GF
\]&lt;p&gt;但是我们发现这样的话 \(G(x) = 0\)，原因是 \(g_{0} = 0\)，于是我们强制 \(g_{0} = 1\)，得到 ：&lt;/p&gt;
\[
G = GF + 1
\]\[
G(x) = \frac{1}{1 - F(x)} = 1 + \frac{x}{1 - 2x - x ^ 2}
\]&lt;p&gt;可以发现现在求出的 \(G(x)\) 比实际值多了 \(1\)，因为我们将 \(g_{0} = 0\) 强制变成了 \(g_{0} = 1\)，修正后有 ：&lt;/p&gt;
\[
G(x) = \frac{x}{1 - 2x - x ^ 2} = \frac{\frac{\sqrt{2}}{4}}{1 - (1 + \sqrt{2})x} + \frac{-\frac{\sqrt{2}}{4}}{1 - (1 - \sqrt{2})x}
\]\[
[x ^ n]G(x) = \frac{\sqrt{2}}{4}(1 + \sqrt{2}) ^ n - \frac{\sqrt{2}}{4}(1 - \sqrt{2}) ^ n
\]&lt;p&gt;最后求出 \(\sqrt{2}\) 在模 \(10^{9} + 7\) 意义下的二次剩余，并且用拓展欧拉定理即可计算出答案。&lt;/p&gt;
&lt;p&gt;时间复杂度 \(\Theta(\log n).\)&lt;/p&gt;
&lt;h2 id="code-link-2"&gt;
&lt;/h2&gt;
&lt;h1 id="heading-3"&gt;
&lt;/h1&gt;
&lt;p&gt;首先考虑二项式反演 ：&lt;/p&gt;
&lt;p&gt;设 \(f_{i}\) 表示恰好有 \(i\) 个数的数量为 \(S\) 的方案数，\(g_{i}\) 表示钦点 \(i\) 个数的数量为 \(S\) 的方案数，显然有 ：&lt;/p&gt;
\[
g_k = \dbinom{m}{k} \times \frac{n ^ {\underline{kS}}}{(S!) ^ k} \times (m - k) ^ {n - kS}
\]\[
g_k = \sum_{i = k} ^ m \dbinom{i}{k} f_i \iff f_k = \sum _ {i = k} ^ m (-1) ^ {i - k} \dbinom{i}{k} g_i
\]\[
Ans = \sum _ {i = 0} ^ m w_if_i
\]&lt;p&gt;于是我们考虑如何对于每个 \(i \in [0, m]\) 求出 \(f_{i}\)，这里有个技巧 ：&lt;/p&gt;
\[
\begin{aligned}
f_k &amp;= \sum _ {i = k} ^ m (-1) ^ {i - k} \frac{i!}{k!(i - k)!} g_i\\
&amp;= k! \sum _ {i = k} ^ m i! g_i \times \frac{(-1) ^ {i - k}}{(i - k)!}
\end{aligned}
\]&lt;p&gt;容易发现上式可以用差值卷积计算，时间复杂度 \(\Theta(n \log n).\)&lt;/p&gt;
&lt;h1 id="付公主的背包"&gt;
&lt;/h1&gt;
&lt;p&gt;容易发现若设每种大小的物品的数量为 \(f_{i}\)，那么答案的生成函数为 ：&lt;/p&gt;
\[
\prod _ i \left (\sum _ j x ^ {ji}\right) ^ {f _ i} = \prod _ i \left(\frac{1}{1 - x ^ i}\right) ^ {f _ i}
\]&lt;p&gt;可以直接使用欧拉变换的求解方式。&lt;/p&gt;
&lt;p&gt;时间复杂度 \(\Theta(n \log n).\)&lt;/p&gt;
&lt;h1 id="无标号无根树计数"&gt;
&lt;/h1&gt;
&lt;p&gt;考虑设 \(f_{n}\) 表示大小为 \(n\) 的无标号有根树的方案数，\(F(x)\) 为数列 \(f\) 的生成函数。&lt;/p&gt;
&lt;p&gt;可以发现，如果将一颗大小为 \(n\) 的无标号有根树的根去除，那么剩下的子树是一个个相同的子问题，只要子树大小的和为 \(n - 1\)，再加上根结点就可以唯一确定地拼出一颗无标号有根树。于是有生成函数方程 ：&lt;/p&gt;
\[
F(x) = x \cdot \varepsilon \circ F(x)
\]&lt;p&gt;求解这个生成函数方程有两种方法，第一种是直接化简，分治多项式乘法求解 ：&lt;/p&gt;
\[
F(x) = x \prod _ i (1 - x ^ i) ^ {-f_i}
\]&lt;p&gt;考虑对两边取 \(\ln\)，将连乘转连加 ：&lt;/p&gt;
\[
\ln F(x) = \ln x - \sum _ i f_i \ln (1 - x ^ i)
\]&lt;p&gt;对数不好处理，考虑求导 ：&lt;/p&gt;
\[
\frac{F'(x)}{F(x)} = \frac{1}{x} + \sum _ i if_i \times \frac{x ^ {i - 1}}{1 - x ^ i}
\]&lt;p&gt;将两边同时乘以 \(xF(x)\) ：&lt;/p&gt;
\[
xF'(x) = F(x) + F(x) \sum _ i if_i \frac{x ^ i}{1 - x ^ i}
\]&lt;p&gt;考虑将右半部分还原成 \(F(x)\) 表示 ：&lt;/p&gt;
\[
xF'(x) = F(x) + F(x)\left(\sum _ {i \geqslant 1} x ^ i F'(x ^ i)\right)
\]&lt;p&gt;设 \(G(x) = \sum_{k} x^{k} F'(x^{k})\)，简单推一推 ：&lt;/p&gt;
\[
G(x) = \sum _ k x ^ k \sum _ {i\geqslant 1} if _ i \left(x ^ {k}\right) ^ {i - 1} = \sum _ k \sum _ i i f _ i x ^ {ik} = \sum _ n x ^ n \sum _ {d | n} d f _ d
\]&lt;p&gt;故 \(g_{n} = \sum_{d | n} df_{d},g_{1} = f_{1} = 1.\)&lt;/p&gt;
&lt;p&gt;因此 ：&lt;/p&gt;
\[
f_n = \frac{1}{n - 1} \sum _ {k = 1} ^ {n - 1} f _ k g _ {n - k}
\]&lt;p&gt;\(f\) 使用分治多项式乘法求解，\(g\) 暴力求解即可做到 \(\Theta(n \log^{2} n).\)&lt;/p&gt;
&lt;p&gt;另一种方法是使用牛顿迭代 ：&lt;/p&gt;
&lt;p&gt;显然我们要求解方程 \(G \circ F(x) = F(x) - x \cdot \varepsilon \circ F(x) = 0\).&lt;/p&gt;
&lt;p&gt;假设当前已经求出了方程在模 \(x^{n}\) 意义下的解 \(F_{0}(x)\)，设方程在模 \(x^{2n}\) 意义下的解为 \(F(x)\)，众所周知有 ：&lt;/p&gt;
\[
F(x) = F_0(x) - \frac{G \circ F_0(x)}{G' \circ F_0(x)}
\]&lt;p&gt;我们知道，\(\varepsilon \circ F(x)\) 可以在 \(\Theta(n \log n)\) 的时间复杂度内求出，\(F'(x)\) 可以 \(\Theta(n)\) 求，所以可以在 \(\Theta(n \log n)\) 的时间复杂度内求下式 ：&lt;/p&gt;
\[
F(x) = F_0(x) - \frac{F_0(x) - x \cdot \varepsilon \circ F_0(x)}{[F_0(x) - x \cdot \varepsilon \circ F_0(x)]'}
\]&lt;p&gt;用上式迭代即可算出 \(F(x)\)，时间复杂度 \(\Theta(n \log n).\)&lt;/p&gt;
&lt;p&gt;现在我们已经求出了无标号有根树的方案数，考虑将无标号无根树的方案数容斥出来。&lt;/p&gt;
&lt;p&gt;考虑钦点无标号无根树的根是它的重心，于是只需要去掉根不是重心的无标号有根树的方案数可以了，分类讨论 ：&lt;/p&gt;
&lt;p&gt;如果重心唯一，那么一定存在一颗子树的大小大于 \(\left\lfloor\frac{n}{2}\right\rfloor\)，考虑枚举它的大小 \(i\)，容易发现这颗子树的方案数和将它切除后树的方案数都是无标号有根树计数问题，其答案我们已经算出，于是总方案数需要减去 \(\sum_{i = \left\lfloor\frac{n}{2}\right\rfloor + 1}^{n - 1} f_{i} \times f_{n - i}.\)&lt;/p&gt;
&lt;p&gt;如果重心不唯一，那么一棵树还会在两个重心上分别被计算，这种方案只会在 \(n\) 为偶数的情况下出现。考虑到这两个重心一定相连，于是将它们之间的连边断开后形成的两个子树的方案数是独立的。但是我们发现，当两颗子树完全相同时，分别以它的两个重心为根时形成的有根树是同构的，所以我们还是只会将它计算一次，故算重的方案中不包括两颗子树相同的情况，于是总方案数还需要减去 \(\binom{f_{\frac{n}{2}}}{2}.\)&lt;/p&gt;
&lt;p&gt;综上，问题得到解决，时间复杂度为 \(\Theta(n \log^{2} n)\) 或 \(\Theta(n \log n).\)&lt;/p&gt;
&lt;h1 id="heading-4"&gt;
&lt;/h1&gt;
&lt;p&gt;考虑构造 \(F_{i}(x) = \sum_{j = 0}^{m_{i}} x^{j}\)，容易发现题目要求的就是 \(\prod_{i = 1}^{n} F_{i}(x)\) 的系数前缀和。&lt;/p&gt;
&lt;p&gt;于是再构造 \(F_{0}(x) = \sum_{i} x^{i}\)，将它和原本的 \(n\) 个幂级数卷在一起，现在考虑求 \(F(x) = \prod_{i = 0}^{n} F_{i}(x)\) 的第 \(L\) 项系数。&lt;/p&gt;
&lt;p&gt;容易发现有 ：&lt;/p&gt;
\[
F(x) = \frac{(1 - x ^ {m_1 + 1})(1 - x ^ {m_2 + 1})\cdots(1 - x ^ {m_n + 1})}{(1 - x) ^ {n + 1}}
\]&lt;p&gt;观察到 \(n\) 很小，考虑暴力将分子拆开，于是分式变成了 \(2^{n}\) 个形如 \(\frac{x^{k}}{(1 - x)^{n + 1}}\) 的部分之和。&lt;/p&gt;
&lt;p&gt;容易发现 ：&lt;/p&gt;
\[
[x ^ L]\frac{x ^ k}{(1 - x) ^ {n + 1}} = \dbinom{n + L - k}{n}
\]&lt;p&gt;于是只需要求 \(2^{n + 1}\) 次形如 \(\binom{t}{n}\) 的组合数即可。&lt;/p&gt;
&lt;p&gt;到这里我们又发现模数 \(p\) 不是质数，于是考虑将式子变形 ：&lt;/p&gt;
\[
\dbinom{t}{n}~\bmod~p = \frac{t^{\underline{n}}}{n!}~\bmod~p = \frac{t ^ {\underline{n}}~\bmod~n!\cdot p}{n!}~\bmod~p
\]&lt;p&gt;于是这样就可以 \(\Theta(n)\) 求解组合数了，总时间复杂度 \(\Theta(2^{n} n).\)&lt;/p&gt;
&lt;h1 id="heading-5"&gt;
&lt;/h1&gt;
&lt;p&gt;简化题意 ：求有多少个从 \(\{1,2,\cdots,n\}\) 到 \(\{1,2,\cdots,n\}\) 的映射 \(f\)，满足 ：&lt;/p&gt;
\[
\underbrace{f \circ f \circ \cdots \circ f}_{k}=\underbrace{f \circ f \circ \cdots \circ f}_{k-1}
\]&lt;p&gt;保证 \(nk \leqslant 2 \times 10^{6},1\leqslant k \leqslant 3.\)&lt;/p&gt;
&lt;p&gt;可以发现这题本质上就是在求深度不超过 \(k\)，环大小为 \(1\) 的基环内向树森林的数量，进一步发现其等价于树高不超过 \(k\) 的有标号有根树森林的数量。&lt;/p&gt;
&lt;p&gt;考虑设树高不超过 \(k\) 的有标号有根树数量的 \(\rm EGF\) 为 \(\hat{F}_{k}(x).\) 计算考虑递推，深度不超过 \(k\) 的树可以看作若干棵深度不超过 \(k - 1\) 的树全部接在一个点上，于是有 ：&lt;/p&gt;
\[
\hat{F}_k(x) = x\cdot \exp \hat{F}_{k - 1}(x)
\]&lt;p&gt;考虑到需要求的是森林的数量，于是答案的指数型生成函数为 \(\exp \hat{F}_{k}(x).\)&lt;/p&gt;
&lt;p&gt;时间复杂度 \(\Theta(kn\log n).\)&lt;/p&gt;
&lt;h1 id="heading-6"&gt;
&lt;/h1&gt;
&lt;p&gt;考虑一次对 \(x\) 的操作造成的影响，他会使 \(a_{x}\) 减少 \(1\)，答案增加 \(\prod_{i \not= x} a_{i}\)，\(\prod_{i} a_{i}\) 减少 \(\prod_{i \not= x} a_{i}.\)&lt;/p&gt;
&lt;p&gt;于是我们可以发现，一次操作对答案的贡献等于 \(\prod_{i} a_{i}\) 的变化量。进一步的，最终答案等于 \(k\) 次操作进行完后 \(\prod_{i} a_{i}\) 的变化量。假设第 \(a_{i}\) 被操作了 \(b_{i}\) 次，那么答案为 \(\prod_{i} a_{i} - \prod_{i} (a_{i} - b_{i}).\)&lt;/p&gt;
&lt;p&gt;考虑计算所有情况下 \(\prod_{i} (a_{i} - b_{i})\) 的和，最后再将答案除以 \(n^{k}.\)&lt;/p&gt;
&lt;p&gt;假设有两个集合 \(S,T,S \cap T = \varnothing\)，\(f_{i}\) 表示 \(\sum b_{k} = i,k\in S\) 对答案的贡献，\(g_{i}\) 表示 \(\sum b_{k} = i,k\in T\) 对答案的贡献，\(h_{i}\) 表示 \(\sum b_{k} = i,k\in S \cup T\) 对答案的贡献，那么显然有 ：&lt;/p&gt;
\[
g_n = \sum _ {i = 0} ^ n \dbinom{n}{i} f_i \times g_{n - i}
\]&lt;p&gt;因为 \(f_{i}\) 和 \(g_{n - i}\) 联合起来的贡献是它们的乘积，并且由于操作有序，所以将 \(n\) 次操作分配到它们还导致要乘上 \(\binom{n}{i}\) 的方案数。&lt;/p&gt;
&lt;p&gt;很明显，这个式子可以用 \(\rm EGF\) 来拟合，设 \(\hat{F}_{i}(x) = \sum_{j} (a_{i} - j) \frac{x^{j}}{j!}\)，那么答案的生成函数为 ：&lt;/p&gt;
\[
\begin{aligned}
\hat{F}(x) &amp;= \prod _ i F_i(x)\\
&amp;= \prod _ i \left( \sum _ j (a_i - j) \frac{x ^ j}{j!} \right)\\
&amp;= \prod _ i \left( a_i \sum _ j \frac{x ^ j}{j!} - \sum _ {j} \frac{x ^ {j + 1}}{j!} \right)\\
&amp;= \prod _ i (a_i - x)e ^ x\\
&amp;= e ^ {nx} \prod _ i (a_i - x)
\end{aligned}
\]&lt;p&gt;\(\prod_{i} (a_{i} - x)\) 直接分治乘可以做到 \(\Theta(n \log^{2} n)\)，\(e^{nx}\) 的系数可以直接求，由于 \(\prod_{i} (a_{i} - x)\) 的最高次数为 \(n\)，所以直接枚举计算即可。&lt;/p&gt;
&lt;p&gt;总时间复杂度 \(\Theta(n \log^{2} n).\)&lt;/p&gt;</description></item></channel></rss>