定理描述
设 \(G\) 是一个无向图,定义度数矩阵 \(D(G)\) 为:
\[D(G) = \begin{pmatrix} deg_1&0&\cdots &0 \\ 0°_2&\cdots &0 \\ \vdots &\vdots & \ddots &\vdots \\ 0&0&\cdots °_n \end{pmatrix}
\]
设 \(e(i,j)\) 表示 \(i,j\) 之间相连的变数,定义邻接矩阵 \(A(G)\) 为:
\[A(G) = \begin{pmatrix} 0&e_{1,2}&\cdots &e_{1,n} \\ e_{2,1}&0&\cdots &e_{2,n} \\ \vdots &\vdots & \ddots &\vdots \\ e_{n,1}&e_{n,2}&\cdots &0 \end{pmatrix}
\]
定义 Laplace 矩阵(亦称 Kirchhoff 矩阵)\(L(G)\) 为:
\[L(G)=D(G)-A(G)
\]
记 \(G\) 的所有生成树边权的乘积的和(当边权为 \(1\) 时就是生成树个数)为 \(t(G)\)。
则有:
\[t(G) = L(G)_{i,i} \ (\forall i\in [1,n])
\]
\(L(G)_{i,i}\) 即 \(|L(G)|\) 第 \((i,i)\) 元 \(a_{ii}\) 的余子式。
这里你可以发现,Laplace 矩阵的所有余子式相等(也是条性质)。
并且,对于所有 \(L(G)\) 的 \(n-1\) 个特征值 \(\lambda_{1},\cdots,\lambda_{n-1}\),满足:
\[t(G) = \frac{1}{n} \prod\limits_{i=1}^{n} \lambda_{i}
\]
有向图的话:
-
若是要统计内向树的个数(记作 \(t^{in}(G,i)\),表示以 \(i\) 为根的内向树),则统计每个点向外的度数和每个点向外连的边(即 \(e(i,j)\) 代表 \(i\) 向 \(j\) 连的边),分别记作 \(D^{out}(G),A^{out}(G),L^{out}(G)=D^{out}(G)-A^{out}(G)\)。
-
若是统计外向树,则与上面相反。
然后也有:
\[t^{in}(G,i) = L^{out}(G)_{i,i} \\
t^{in}(G,i) = L^{in}(G)_{i,i}
\]
证明先咕着,等我学学线代(话说同寄大学数学系编的玩意儿真难懂)。
【模板】Matrix-Tree 定理&[CQOI2018]社交网络
板子。
[SHOI2016]黑暗前的幻想乡
暴力容斥。
原题要求恰好 \(n\) 个公司都选到,我们算至多有 \(n\) 个公司被选到的方案数:\(g(n)\),设答案为 \(f(n)\),则有:
\[g(n)=\sum_{i=1}^{n} f(i)
\]
于是就有:
\[f(n)=\sum_{i=1}^{n} (-1)^{n-i} g(i)
\]
考虑枚举建筑公司的选择情况,然后矩阵树定理。
ljy 他们的题单的 CF53? 也是这种做法
[SDOI2014]重建
考虑到题目要我们求这个:
\[\sum_{T} \prod\limits_{e\in T} p_{e} \prod\limits_{e \notin T} (1-p_{e})
\]
不好做,考虑把右边那个连乘转成和 \(e\in T\) 相关的,这样才可以用矩阵树定理做,因为:
\[\prod\limits_{e \notin T} (1-p_{e}) = \frac{\displaystyle \prod\limits_{e \in G} (1-p_{e})}{\displaystyle \prod\limits_{e \in T} (1-p_{e})}
\]
所以我们有:
\[\sum_{T} \prod\limits_{e\in T} p_{e} \prod\limits_{e \notin T} (1-p_{e}) \\
=\sum_{T} \prod\limits_{e\in T} p_{e} \frac{\displaystyle \prod\limits_{e \in G} (1-p_{e})}{\displaystyle \prod\limits_{e \in T} (1-p_{e})} \\
=\prod\limits_{e \in G} (1-p_{e}) \sum_{T} \prod\limits_{e\in T} \frac{p_{e}}{1-p_e}
\]
注意 \(p_e=1\) 的情况需要加上 \(eps\) 随机扰动一下。
[省选联考 2020 A 卷] 作业题
很经典(对我来说不是)的套路。
先莫反:
\[\sum_{T} \left(\sum\limits_{i=1}^{n-1} w_{e_i}\right) \times \gcd(w_{e_1},w_{e_2},\dots,w_{e_{n-1}}) \\
= \sum_{T} \left(\sum\limits_{i=1}^{n-1} w_{e_i}\right) \times \sum_{d|w_{e_i},e_i\in T} [\gcd(w_{e_1},w_{e_2},\dots,w_{e_{n-1}}) ==d] \\
=\sum_{T} \left(\sum\limits_{i=1}^{n-1} w_{e_i}\right) \times \sum_{d|w_{e_i},e_i\in T} \varphi (d) \\
=\sum_{d=1}^{mx_{w}} \varphi (d) \sum_{\forall e_{i}\in T,d|e_{i}} \left(\sum\limits_{i=1}^{n-1} w_{e_i}\right)
\]
但我们的 Matrix-Tree 只能求连乘,怎么办?
然后我们发现,如果维护一个多项式 \(w_i x+1\),维护它的一次项系数,我们会发现:
\[[x]\prod\limits_{i=1}^{n-1} (w_{e_{i}}x+1) = \sum\limits_{i=1}^{n-1} w_{e_i}
\]
于是我们考虑到用多项式当做元素去求行列式,于是我们要想办法维护各运算(加,减,乘,除)后的一次项系数,前三者都好处理,关键在于第四种。
对于 \(\displaystyle\frac{ax+b}{cx+d}\)
考虑构造一个 \(Cx+D\),满足 \((Cx+D)(cx+d) \equiv 1 \pmod{x^2}\)。
我们把式子拆开:
\[(Cd+Dc)x+Dd = 1
\]
考虑到 \(Dd\) 必须等于 \(1\)。
于是:
\[Cd+\frac{c}{d}=0 \\
C=-\frac{c}{d^2}
\]
再带回去:
\[\frac{ax+b}{cx+d} = (ax+b)(Cx+D) \equiv \frac{ad-bc}{d^2}x+\frac{b}{d} \pmod{x^2}
\]
复杂度 \(O(n^3mx_{w})\),注意求行列式时判断非零的过程即判断常数项是否为 \(0\),求逆元时也是用常数项为 \(1\) 的多项式去求,取反时用一次项系数和常数项都为 \(0\) 的多项式去减。
[北京省选集训2019]生成树计数
上道题的拓展。
我们考虑两个数加起来的 \(k\) 次方:
\[(a+b)^k = \sum_{i=0}^{k} \binom{i}{k} a^{i}b^{k-i} \\
=k!\sum_{i=0}^{k} \frac{a^{i}b^{k-i}}{i!(k-i)!} \\
=k!\sum_{i=0}^{k} \frac{a^{i}}{i!} \cdot \frac{b^{k-i}}{(k-i)!} \\
=k![x^k]\operatorname{e}^{ax}\operatorname{e}^{bx}
\]
两个的情况可以弄成 EGF,那 \(n\) 种的也可以类似。
\[\left(\sum_{i=1}^{n} w_i \right)^k = k![x^k]\prod\limits_{i=1}^{n}\operatorname{e}^{w_ix}
\]
所以我们维护一个 EGF:\(\displaystyle\sum_{i=1}^{k} \frac{w_i^k}{i!}\),对这个玩意做矩阵树定理。
PS:判断一个多项式元素是否为 \(0\) 还是得把所有的项都判一遍吧(毕竟这样才能消除对行列式的影响)。
Dead Ends
考虑枚举选择为叶子节点的状态,强制它们被选,对没选的节点做矩阵树定理。
但是,我们没被选的节点也可能成为叶子。
换句话说,我们设选择为叶子节点的状态为 \(S\) 的答案 \(f(S)\),而我们求出来的玩意为 \(g(S)\),就会有:
\[g(S)=\sum_{S\subseteq T} f(T)
\]
考虑把集合取反,再容斥。
\[g(\overline{S}) = \sum_{\overline{T}\subseteq \overline{S}} f(\overline{T}) \\
\therefore f(\overline{S}) = \sum_{\overline{T}\subseteq \overline{S}} (-1)^{|\overline{S}|-|\overline{T}|}g(\overline{T})
\]
枚举子集是 \(O(3^n)\),可以用高维差分(或者用 IFWT?反正我不会)做到 \(O(n^22^n)\)。