矩阵树定理

撅震树腚里

P6178。板子题。有有向树有无向树。

Submission

计算一个图的生成树个数。

设图的邻接矩阵是 \(G\)\(G_{i,j}\) 就是 \(i,j\) 之间边的条数),度数矩阵 \(D\) (除了 \((i,i)\) 位置是度数其他均为0),设 \(M=D-G\),则有该图的生成树数量即为 \(M\) 去掉第 \(i\)\(i\) 列(\(i\) 任意)形成的行列式的值。

这个也可以理解成一个边带权的图的所有生成树边权乘积之和。

行列式求值就是高斯消元消成上三角矩阵。消元过程中,交换两行答案取相反数,一行整体减去另一行倍数不变,某行整体乘 \(x\),答案也乘 \(x\)。最后的答案就是消元过程中的系数乘上主对角线的乘积。

例:LgP4336。容斥+矩阵树定理。设 \(f(S)\) 是只考虑集合 \(S\) 中公司的边形成的生成树数量,答案显然就是一个简单容斥:

\[\sum_S (-1)^{n-1-|S|}f(S) \]

复杂度 \(O(2^{n-1} n^3)\)

Submission

LgP3317。裸矩阵树。发现形式是

\[\sum_T\prod_{e\subset T}p_{e}\prod_{e\not \subset T}(1-p_{e}) \]

那么你把前面的 \(\prod\) 里面乘一个 \(\frac{1}{1-p_{e}}\),后面里面乘一个 \(1-p_e\) 就转化成了

\[(\prod_e (1-p_e)) \times \sum_T \frac{p_e}{1-p_e} \]

后面就是标准矩阵树定理形式。

当然,普通的树能算,有向树也是可以算的捏。

首先 \(D\) 如果是入度的矩阵,答案就是外向树。

如果是出度的矩阵,答案就是内向树。当然忘了造两组试一下就行。

然后有向树要指定根,你删掉 \(M\) 的哪行哪列就是指定哪个点(无向图是无根树,根对答案无影响,所以删任意点就相当于随便指定一个根)。

LgP5406。矩阵树定理+FWT,奇怪的东西。

先要发现求最值是困难的,考虑计数然后求最大的数量不为0的答案。

因为矩阵树定理求的是 \(\sum_T \prod_{p_e\subset T} p_e\),这个题里的不是 \(prod\),而是一个给定的线性变换。于是联想到 \(FWT\)。对于每条边 \((i,j)\) 的不同边权构造一个集合幂级数,然后做一遍相关线性变换的 \(FWT\),之后直接对于每个值 \(w\) 的行列式求值,得到答案序列 \(c_i\),然后把 \(c\) \(IFWT\) 回去,就得到了答案。感性理解下是对的。复杂度 \(O(n^3 2^w)\)

这里涉及到 \(FWT\) 的一个本质,就是 \(FWT\) 可以做任意线性变换的情况。

posted @ 2023-02-16 19:39  infinities  阅读(27)  评论(0编辑  收藏  举报