无标号计数与带标号计数
无标号就是在观测上不考虑个体的差异, 带标号就是在观测上考虑个体的差异.
对于无标号计数, 我们可以按照某种关键值, 给所有的元素进行定序, 所有无标号计数等价于定序计数.
对于带标号计数, 我们可以任意设置关键值, 所以带标号计数等价于不定序计数.
最常见的例子就是组合与排列, 它们还满足一组特殊的关系: 组合数 * n! = 排列数.
有向图 / 无向图
带标号无向图的 度数的K次方 的和
分析
$ans = n \sum_{d = 0} ^ {n - 1} \binom{n-1}{d} d ^ K 2 ^ {\binom{n-1}{2}} = n 2 ^ {\binom{n-1}{2}} \sum_{d = 0} ^ {n - 1} \binom{n-1}{d} d ^ K$ .
$\begin{aligned} \sum_{d = 0} ^ n \binom{n}{d} d ^ K & = \sum_{d = 0} ^ n \binom{n}{d} \sum_{i = 0} ^ K S_2(K, i) d ^ {\underline{i}} \\ & = \sum_{d = 0} ^ n \binom{n}{d} \sum_{i = 0} ^ K S_2(K, i) i! \binom{d}{i} \\ & = \sum_{i = 0} ^ K S_2(K, i) i! \sum_{d = i} ^ n \binom{n}{d} \binom{d}{i} \\ & = \sum_{i = 0} ^ K S_2(K, i) i! \sum_{d = i} ^ n \binom{n}{i} \binom{n - i}{d - i} \\ & = \sum_{i = 0} ^ K S_2(K, i) i! \binom{n}{i} \sum_{d = i} ^ n \binom{n - i}{d - i} \\ & = \sum_{i = 0} ^ K S_2(K, i) i! \binom{n}{i} \sum_{d = 0} ^ {n - i} \binom{n - i}{d} \\ & = \sum_{i = 0} ^ K S_2(K, i) n ^ {\underline{i}} 2 ^ {n - i} \end{aligned}$ .
$S_2(m, k) = \frac{1}{k!} \sum_{s = 0} ^ {k} \binom{m}{s} (-1) ^ s (k - s) ^ m$ .
小结
看到 $x ^ k$ , 可以尝试使用 Stirling 数进行展开.
带标号无向图的 度数之和/边数 的K次方
分析
记 $m(s)$ 为图 $s$ 的边数, 则所求可以通过边数进行转化.
$ans = \sum_{s} (\sum_{i} d_i) ^ K = \sum_{s} (2m(s)) ^ K = 2 ^ K \sum_{s} m(s) ^ K$ .
$\begin{aligned} \sum_{s} m(s) ^ K & = \sum_{s} \sum_{i} S_2(K, i) i! \binom{m(s)}{i} \\ & = \sum_{i} S_2(K, i) i! \sum_{s} \binom{m(s)}{i} \end{aligned}$ .
考虑 $f(i) = \sum_{s} \binom{m(s)}{i}$ 的组合意义, 即对于所有的 n 个点的简单图, 求取出 $i$ 条边的方案数的和. 那么显然枚举选取结果, 然后其余随便选不选, 即 $f(i) = \binom{\binom{n}{2}}{i} 2 ^ {\binom{n}{2} - i}$ .
带标号无向连通图计数
分析
设 n 个点的带标号无向连通图的个数为 $f_n$ , n 个点的带标号无向图的个数为 $g_n$ .
显然 $g_n = 2 ^ {\binom{n}{2}}$ .
第一种想法是建立 $f_n$ 的递推式.
$f_n = g_n - \sum_{i = 1} ^ {n-1} \binom{n-1}{i-1} f_i g_{n-i}$ .
第二种想法是建立 $f_n$ 与 $g_n$ 的关系.
设 $g$ 的指数型生成函数为 $G$ , $f$ 的指数型生成函数为 $F$ .
现在要进行排列计数, 且合并次数任意, 所以 $G = e ^ {F(x)}$ , 即 $F(x) = \ln G$ .
小结
对于 "连通图" 的限制条件, 我们通常有两种想法:
① 考虑计算 $f_n$ . 我们去掉这个限制条件, 再减去不连通的图的个数. 至于不连通图的图的个数, 我们考虑枚举 1 号点所在的连通块的大小, 然后就可以进行递推了, 还可以使用 FFT 进行优化.
② 考虑构建指数型生成函数, 进行排列计数, 且合并次数任意, 所以 $G = e ^ {F(x)}$ .
树
带标号 有根树/无根树 计数
分析
我们对于一棵 n 个带标号节点的无根树, 每次选择标号最小的叶子节点, 把与它相邻的点加入 prufer 序列中, 然后删除该点, 可以唯一地构造长度为 n-2 的prufer序列.
对于一个长度为 n-2 , 每一项在 1 到 n 之间的数列, 我们把每个节点的度数求出来, 然后每次将度数为 1 , 标号最小的点与 prufer 序列的当前项进行连边, 然后把两个点的度数减 1 , 可以唯一地逆构造成一棵 n 个节点, 带编号的无根树.
由此知道, n 个节点的无根树, 与长度为 n-2 , 各项在 1 到 n 之间的 prufer 序列一一对应.
n 个节点, 带编号的无根树有 $n ^ {n-2}$ 种.
对于有根树, 我们对无根树选定一个根, 所以有 $n ^ {n - 1}$ 种.
小结
树的计数的相关问题, 我们要想到 prufer 序列.
每个点度数确定的带标号树的个数
分析
设第 i 个点的度数为 $d_i$ , 那么 prufer 序列中, $i$ 出现的次数为 $d_{i-1}$ 次, 所以答案为 $\binom{n-2}{d_1-1, d_2-1, ..., d_n - 1}$ .
基环树计数
分析
我们枚举环的大小 s , 选取 s 个节点作为环上的点, 再枚举环的结构, 即乘上系数 $\binom{n}{s} (s-1)!$ .
接下来考虑统计 n 个节点划分为 s 棵根节点确定的有根树的方案数.
如上图所示, 我们建立一个虚拟节点, 将所有的根节点与这个虚拟节点, 虚拟节点的权值设置为无穷大 INF , s 个根节点的设置为比无穷大小一点的无穷大 INF‘ , 现在相当于统计这棵树的 prufer 序列的个数, 满足长度为 n+1-2 = n-1 , 第 1 位到第 n-1-s 位为任意, 第 n-s 位为 INF‘ , 第 n-s+1 位到第 n-1 位为 INF , 所以方案数为 $n ^ {n - s - 1} s$ .
二叉树
无标号二叉树计数
分析
设 $f_n$ 为 $n$ 个点的无标号二叉树个数.
先给结论, $f_n$ 为卡特兰数的第 $n$ 项 $C_n = \frac{\binom{2n}{n}}{n+1}$ .
边界为 $f_0 = 1$ .
转移时我们考虑枚举左边的点的个数, 可以得到 $f_n = \sum_{i + j + 1 = n} f_i f_j$ .
构建 $f_0, f_1, ...$ 的生成函数 $F(x) = \sum_{i} f_i x ^ i$ .