• [学习笔记] 矩阵树定理


    因为在临时抱佛脚,所以是没有证明的~

    0. 前置芝士

    0.1. 拉普拉斯展开

    对于行列式 \(D\),任意第 \(i\) 行(列同理)按下式展开的值与行列式值相等

    \[\text{Value}=\sum_{j=1}^n (-1)^{i+j}\cdot a_{i,j}\cdot M_{i,j} \]

    其中 \(M_{i,j}\)\(a_{i,j}\) 的余子式。


    一些闲话:这个可以用来推导 "轮状病毒" 一题中的递推式。

    1. 矩阵树定理

    1.1. 定理一

    1.1.1. 内容

    构造连通矩阵和度数矩阵。连通矩阵 \(A\) 的第 \(i\) 行第 \(j\) 列上的数字表示原无向图中 \(i,j\) 两点之间边的条数。度数矩阵 \(D\) 只有 \(D_{i,i}\) 有值表示点 \(i\) 的度数。定义 \(L=D-A\),无向图生成树的个数就是 \(L\) 去掉任意行任意列的矩阵的行列式。

    1.1.2. 应用

    例 1. 求无向图所有生成树边权乘积的和。

    将度数矩阵变成与点邻接边的边权和,连通矩阵变成边的权值再应用矩阵树定理即可。

    例 2. 求无向图必选某一条边的所有生成树个数。

    我是伞兵,这都不会。简单容斥即可。

    例 3. 用生成函数描述限制:\(\rm Link.\)

    例 4. \(\text{[SDOI 2014] }\)重建

    题目要求

    \[\begin{align} \text{Ans}&=\sum_{T(V,E')}\left(\prod_{e\in E'}p_e\cdot \prod_{e\in E\setminus E'}(1-p_e) \right)\\ &=\sum_{T(V,E')}\left(\prod_{e\in E'}p_e\cdot \frac{\prod_{e\in E}(1-p_e)}{\prod_{e\in E'}(1-p_e)} \right)\\\ &=\prod_{e\in E}(1-p_e)\cdot \sum_{T(V,E')}\left(\prod_{e\in E'}\frac{p_e}{1-p_e} \right) \end{align} \]

    1.2. 定理二

    1.2.1. 内容

    给出有向图和其中的一个点,求以这个点为根的生成外向树个数(外向树满足每个点有且仅有一条入边)。

    构造连通矩阵和度数矩阵。连通矩阵 \(A\) 的第 \(i\) 行第 \(j\) 列上的数字表示有向图中 \(i\rightarrow j\) 的边的条数。度数矩阵 \(D\) 只有 \(D_{i,i}\) 有值表示点 \(i\)入度。定义 \(L=D-A\),答案就是 \(L\) 去掉根所在的行和列的矩阵的行列式。

    1.3. 定理三

    1.3.1. 内容

    给出有向图和其中的一个点,求以这个点为根的生成内向树个数。

    构造连通矩阵和度数矩阵。连通矩阵 \(A\) 的第 \(i\) 行第 \(j\) 列上的数字表示有向图中 \(i\rightarrow j\) 的边的条数。度数矩阵 \(D\) 只有 \(D_{i,i}\) 有值表示点 \(i\)出度。定义 \(L=D-A\),答案就是 \(L\) 去掉根所在的行和列的矩阵的行列式。

    2. \(\text{BEST}\) 定理

    用于求解有向图欧拉回路的个数。

    首先,如果存在某个点的入度和出度不相等,那么这张图不存在欧拉回路。否则,设 \(t(s)\) 为以 \(s\) 为根的内向树(或者外向树)个数,\(\text{deg}(s)\)\(s\) 的出度(或者入度),所求即为

    \[t(s)\cdot \prod_{v\in V}(\text{deg}(v)-1)! \]

    需要注意的是,以任何一个点作为根最后都可以得出一样的答案。

    如果要求从点 \(s\) 开始的欧拉回路个数呢?此时只能代入 \(t(s)\),最后答案还要多乘上 \(\text{deg}(s)\).

    3. 一些特殊的行列式

    3.1. 箭型行列式

    \[D_n= \left|\begin{array}{cccc} x_1&1&1 &... &1\\ 1&x_2&0&\cdots &0\\ 1&0&x_3&\cdots&0\\ \vdots &\vdots &\vdots &\ddots&\vdots \\ 1&0&0&...&x_n \end{array}\right| \]

    将第一列元素依次减去第 \(i\) 列的 \(\frac{1}{x_i}\) 倍有

    \[D_n= \left|\begin{array}{cccc} x_1-\frac{1}{x_2}-\cdots -\frac{1}{x_n}&1&1 &... &1\\ 0&x_2&0&\cdots &0\\ 0&0&x_3&\cdots&0\\ \vdots &\vdots &\vdots &\ddots&\vdots \\ 0&0&0&...&x_n \end{array}\right| \]

    所以有

    \[D_n=\left(x_1-\sum_{i=2}^{n}\frac{1}{x_i}\right)\cdot \prod_{i=2}^{n}x_i \]

    可以发现,上文的推导可以应用于任何形状相同的行列式。

    比如下面这个行列式

    \[D_n=\left|\begin{array}{cccc} 1+x_{1}^2&x_1x_2&x_1x_3 &... &x_1x_n\\ x_2x_1&1+x_{2}^2&x_2x_3&...&x_2x_n\\ x_3x_1&x_3x_2&1+x_{3}^2&...&x_3x_n\\ \vdots &\vdots &\vdots &\ddots&\vdots\\ x_nx_1&x_nx_2&x_nx_3&...&1+x_{n}^2 \end{array}\right| \]

    每一行都有类似 \(kx_1,kx_2,\dots,kx_n\),所以考虑升阶

    \[D_n=\left|\begin{array}{cccc} 1&x_1&x_2&x_3&...&x_n\\ 0&1+x_{1}^2&x_1x_2&x_1x_3 &... &x_1x_n\\ 0&x_2x_1&1+x_{2}^2&x_2x_3&...&x_2x_n\\ 0&x_3x_1&x_3x_2&1+x_{3}^2&...&x_3x_n\\ 0&\vdots &\vdots &\vdots &\ddots&\vdots\\ 0&x_nx_1&x_nx_2&x_nx_3&...&1+x_{n}^2 \end{array}\right| \]

    这样就可以用第一行消下面所有行了

    \[D_n=\left|\begin{array}{cccc} 1&x_1&x_2&x_3&...&x_n\\ -x_1&1&0&0 &... &0\\ -x_2&0&1&0&...&0\\ -x_3&0&0&1&...&0\\ \vdots&\vdots &\vdots &\vdots &\ddots&\vdots\\ -x_n&0&0&0&...&1 \end{array}\right| \]

    这就是箭型行列式,直接化简即可。

    3.2. 两三角型行列式

    特征为对角线上方元素均为 \(a\),下方元素均为 \(b\)。当 \(a=b\) 时可化为箭型行列式计算,具体可以将 \(i=2\dots n\) 行都减去第一行;当 \(a\not=b\) 时采用 拆行法 计算,它的目的是为了 降阶

    \[D_n=\left|\begin{array}{cccc} x_1&a&a &... &a\\ b&x_2&a&...&a\\ b&b&x_3&...&a\\ \vdots &\vdots &\vdots &\ddots &\vdots \\ b&b&b&...&x_n \end{array}\right| \]

    \[D_n=\left|\begin{array}{cccc} x_1&a&a &... &a\\ b&x_2&a&...&a\\ b&b&x_3&...&a\\ \vdots &\vdots &\vdots &\ddots &\vdots\\ b&b&b&...&b \end{array}\right|+\left|\begin{array}{cccc} x_1&a&a &... &0\\ b&x_2&a&...&0\\ b&b&x_3&...&0\\ \vdots &\vdots &\vdots &\ddots &\vdots\\ b&b&b&...&x_n-b \end{array}\right| \]

    将第 \(i=1\dots n-1\) 列都减去最后一列,得

    \[D_n=\left|\begin{array}{cccc} x_1-a&0&0 &... &a\\ b-a&x_2-a&0&...&a\\ b-a&b-a&x_3-a&...&a\\ \vdots &\vdots &\vdots &\ddots &\vdots\\ 0&0&0&...&b \end{array}\right|+(x_n-b)\cdot D_{n-1} \]

    所以

    \[D_n=b\cdot \prod_{i=1}^{n-1}(x_i-a)+(x_n-b)\cdot D_{n-1} \]

    如果拆分成 \(a,x_n-a\),就可以得到

    \[D_n=a\cdot \prod_{i=1}^{n-1}(x_i-b)+(x_n-a)\cdot D_{n-1} \]

    \(D_{n-1}\) 消掉可得

    \[D_n=\frac{1}{a-b}\cdot \left(a\cdot \prod_{i=1}^{n}(x_i-b)-b\cdot \prod_{j=1}^{n}(x_j-a)\right) \]

    3.3. 各行/列元素和相等型行列式

    \[D_n= \left|\begin{array}{cccc} 1+x_1&x_1 &... &x_1\\ x_2&1+x_2&...&x_2\\ \vdots &\vdots &\ddots&\vdots\\ x_n&x_n&...&1+x_n \end{array}\right| \]

    \[D_n= \left|\begin{array}{cccc} 1+\sum_{i=1}^{n}x_i&1+\sum_{i=1}^{n}x_i &... &1+\sum_{i=1}^{n}x_i\\ x_2&1+x_2&...&x_2\\ \vdots &\vdots &\ddots&\vdots\\ x_n&x_n&...&1+x_n \end{array}\right| \]

    \[D_n= \left(1+\sum_{i=1}^{n}x_i\right)\cdot \left|\begin{array}{cccc} 1&1 &... &1\\ x_2&1+x_2&...&x_2\\ \vdots &\vdots &\ddots&\vdots\\ x_n&x_n&...&1+x_n \end{array}\right|= \left(1+\sum_{i=1}^{n}x_i\right)\cdot \left|\begin{array}{cccc} 1&0&... &0\\ x_2&1&...&0\\ \vdots &\vdots &\ddots&\vdots\\ x_n&0&...&1 \end{array}\right|=1+\sum_{i=1}^{n}x_i \]

    3.4. 两条线型行列式

    \[D_n=\left|\begin{array}{cccc} a_1&b_1&0 &... &0\\ 0&a_2&b_2&...&0\\ 0&0&a_3&...&0\\ \vdots &\vdots &\vdots &\vdots&\vdots\\ 0&0&...&a_{n-1}&b_{n-1} \\ b_n&0&...&0&a_n \end{array}\right| \]

    按照第一列两个非零元素拉普拉斯展开即可

    \[D_n=\prod_{i=1}^{n}a_i+(-1)^{n+1}\cdot \prod_{i=1}^{n}b_i \]

    3.5. 类范德蒙德型行列式

    特征为存在逐行(列)元素按幂递增(减)

    \[D_n=\left|\begin{array}{cccc} a_{1}^n& a_{1}^{n-1}b_1&... &a_1b_1^{n-1}&b_1^n\\ a_{2}^n&a_{2}^{n-1}b_2&...&a_2b_2^{n-1}&b_2^n\\ \vdots&\vdots&\ddots&\vdots&\vdots\\ a_{n}^n&a_{n}^{n-1}b_n&...&a_nb_n^{n-1}&b_n^n\\ a_{n+1}^n&a_{n+1}^{n-1}b_{n+1}&...&a_{n+1}b_{n+1}^{n-1}&b_{n+1}^n \end{array}\right| \]

    每行都提出 \(a_i^n\) 即可

    \[D_n=\prod_{i=1}^{n+1}a_i^n\cdot \left|\begin{array}{cccc} 1& \frac{b_1}{a_1}&... &\left(\frac{b_1}{a_1}\right)^{n-1}&\left(\frac{b_1}{a_1}\right)^{n}\\ 1&\frac{b_2}{a_2}&...&\left(\frac{b_2}{a_2}\right)^{n-1}&\left(\frac{b_2}{a_2}\right)^{n}\\ \vdots&\vdots&\ddots&\vdots&\vdots\\ 1&\frac{b_n}{a_n}&...&\left(\frac{b_n}{a_n}\right)^{n-1}&\left(\frac{b_n}{a_n}\right)^{n}\\ 1&\frac{b_{n+1}}{a_{n+1}}&...&\left(\frac{b_{n+1}}{a_{n+1}}\right)^{n-1}&\left(\frac{b_{n+1}}{a_{n+1}}\right)^{n} \end{array}\right| \]

    这就是经典范德蒙德型行列式了,所以

    \[\begin{align}D_n&=\prod a_i^n \cdot \prod_{1\le i<j\le n+1}\left(\frac{b_j}{a_j}-\frac{b_i}{a_i} \right)=\prod a_i^n \cdot \prod_{1\le i<j\le n+1}\frac{a_ib_j-b_ia_j}{a_ia_j}\\&=\prod_{1\le i<j\le n+1} (a_ib_j-b_ia_j)\end{align} \]

  • 相关阅读:
    二线城市的创业人才之战
    小程序的风口到底如何?
    短视频广告一条上百万,揭秘短视频背后的故事
    让我们来看看这些企业的创始人,在互联网金融的十年里的故事
    背靠大树成为创业成功的显学
    草根站长的艰辛创业路
    互联网大佬们的创业重要选择时刻
    80后的罗敏已经在创业路上走了十几年
    CentOS7 通过 YUM 升级 VIM8
    matplotlib 画图中的basemap安装问题
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/14404119.html
Copyright © 2020-2023  润新知