生成树计数:矩阵树定理
博主今天做题的时候忘记有向图拉普拉斯矩阵的对角线是对入边还是出边求和了,于是重新推了一遍。
本文将从一般形式的生成树计数出发,经过数学上的推导,得出矩阵树定理。
生成树计数
考虑到图的有向/无向之分,以及边的重数,我们考虑一类相对一般的情况:
问题:生成内向树权值积之和
对一个顶点集合 $V=\{1, 2, \ldots, n\}$, 设定 $n$ 阶权值方阵 $(w_{ij})$.
对于所有该顶点集合上以 $R$ 为根的内向树 $T=(V, E)$, 定义其权值为
$$\prod_{\left<u, v\right>\in E}w_{uv}$$
求所有不同的 $T$ 的权值之和。
推导
方便起见,以下把树的非根结点集合记作 $V'$, 即 $V'=V\setminus\{R\}$.
对于每个非根结点,我们先任选一条出边。
那么可以得出,这种情况下,权值和为:
$$\prod_{u \in V'}\sum_{v \in V\setminus\{u\}}w_{uv}$$
这些出边将构成若干基环内向树和一棵以 $R$ 为根的内向树。
为了得到树,对基环进行容斥。
设所枚举的基环的顶点集合为 $S \subseteq V'$.
设 $S \to S$ 的置换 $p$ 满足:如果顶点 $u$ 的出边指向 $v$, 那么 $p(u)=v$.
这样,$S$ 及其错排 $p$ 构成的二元组 $(S, p)$ 和基环集合一一对应。
于是考虑一个 $S$ 的错排 $p$, 假设该错排能够分解成 $C(p)$ 个轮换,那么对应地为 $C(p)$ 个基环的并:
- 容斥系数为 $(-1)^{C(p)}$.
- 基环上的点 $u$ 出边权值为 $w_{u,p(u)}$.
- 不在所枚举的基环上的点 $u$ 可以任选出边,因此总权值为 $\sum_{v \in V\setminus\{u\}}w_{uv}$.
于是对于 $S, p$, 其对答案的贡献是 $(-1)^{C(p)}\prod_{u \in S}w_{u,p(u)}\prod_{u \in V' \setminus S}\sum_{v \in V\setminus\{u\}}w_{uv}$.
现在,答案式可以写成:
$$\sum_{S \subseteq V'}\sum_{p: S \to S}(-1)^{C(p)}\prod_{u \in S}w_{u,p(u)}\prod_{u \in V' \setminus S}\sum_{v \in V\setminus\{u\}}w_{uv}$$
我们知道,一个大小为 $m$ 的轮换可以分解为 $m-1+2k$ 个对换;对换会改变置换 $p$ 的逆序数 $n(p)$ 的奇偶性。
所以 $C(p)+n(p) \equiv |S| \pmod 2$.
因此 $(S, p)$ 对答案的贡献又可以写成
$$\begin{align}&(-1)^{|S|-n(p)}\prod_{u \in S}w_{u,p(u)}\prod_{u \in V' \setminus S}\sum_{v \in V\setminus\{u\}}w_{uv}\\=&(-1)^{n(p)}\prod_{u \in S}\left(-w_{u,p(u)}\right)\prod_{u \in V' \setminus S}\sum_{v \in V\setminus\{u\}}w_{uv}\end{align}$$
考虑一个 $V'$ 的置换 $q(i)=\begin{cases}p(i),& i \in S; \\ i, & i \in V' \setminus S.\end{cases}$
那么所有 $(S, p)$ 与 $V'$ 的所有置换 $q$ 又建立起了一一对应。于是,对于 $i, j \in V'$, 设 $w'_{ij}=\begin{cases}-w_{ij}, &i \ne j; \\ \sum_{k \in V\setminus\{i\}}w_{ik}, &i=j.\end{cases}$
于是答案又可化简为:
$$\sum_{q: V' \to V'}(-1)^{n(p)}\prod_{u \in V'}w'_{u,q(u)}$$
这是一个行列式的形式,可以使用高斯消元法求出。
结论
计算生成内向树权值积之和的算法如下:
- 构造 $n$ 阶方阵 $l_{ij}=\begin{cases}-w_{ij}, &i \ne j; \\ \sum_{k \in V\setminus\{i\}}w_{ik}, &i=j.\end{cases}$
- 删除 $(l_{ij})$ 的第 $R$ 行和第 $R$ 列得矩阵 $L'$.
- 用高斯消元法求出 $\det L'$.
接下来讲几个简单的推论。
矩阵树定理
在简单无向图上运用上述结论:
- 可以任意确定一个根 $R$.
- $(w_{ij})$ 为邻接矩阵 $A$.
因此,$\sum_{k \in V\setminus\{i\}}w_{ik}=d_i$ 为点 $i$ 的度数。
定义拉普拉斯矩阵(也叫基尔霍夫矩阵)$L=D-A$, 其中 $D=\mathrm{diag}(d_i)$ 是度数矩阵,$A$ 是邻接矩阵。
不难发现,上面的行列式 $\det L'$ 就是拉普拉斯矩阵 $L$ 去掉第 $R$ 行和第 $R$ 列的主子式。
这就得到了矩阵树定理:生成树个数=拉普拉斯矩阵的任意 $n-1$ 阶主子式。
对于任意无向图来说,自环要删去,度数矩阵中重边要重复计算,邻接矩阵上 $a_{ij}$ 记的是边 $(i, j)$ 的重数。
有向图的矩阵树定理
对于以 $R$ 的根的生成内向树,不难发现拉普拉斯矩阵为出度矩阵 $D^+=\mathrm{diag}(d^{+}_i)$ 和邻接矩阵的差,生成内向树个数=拉普拉斯矩阵去掉第 $R$ 行第 $R$ 列的主子式。
对于以 $R$ 的根的生成外向树,可以考虑取图的转置,转化为内向树,那么 $(w_{ij})=A^T$.
$\sum_{k \in V\setminus\{i\}}w_{ik}=d^-_i$ 为点 $i$ 的入度,设入度矩阵 $D^-=\mathrm{diag}(d^{-}_i)$, 则拉普拉斯矩阵为 $D^--A^T$.
由于转置的主子式等于该主子式的转置,而行列式转置值不变,所以也可以说,拉普拉斯矩阵为 $D^--A$.
同样地,自环要删去,出/入度矩阵中重边要重复计算,邻接矩阵上 $a_{ij}$ 记的是边 $\left<i, j\right>$ 的重数。
总结
生成树计数的一般要求:去除自环,度数/出度/入度中重边算多次,邻接矩阵记重数。
无向图的矩阵树定理
拉普拉斯矩阵 $L=D-A$, 任意 $n-1$ 阶主子式。
有向图的矩阵树定理
内向树:拉普拉斯矩阵 $L=D^+-A$, 去掉第 $R$ 行第 $R$ 列的主子式。
外向树:拉普拉斯矩阵 $L=D^--A$, 去掉第 $R$ 行第 $R$ 列的主子式。