zoukankan      html  css  js  c++  java
  • 矩阵树定理

    (zay)(T3 balabalabalabala)所以它是个矩阵树时我是懵逼的
    啥玩意?矩阵树?那是啥?能吃吗?
    于是就有了盯着洛谷日报并一脸懵逼的我以及这篇博客

    前置芝士

    0.有个脑子
    1.行列式求值
    2.上三角矩阵的行列式的值等于其对角线上所有的值的乘积
    3.高斯消元
    4.矩阵乘法

    一些定义

    一.度数矩阵(A)
    (A_{i,i}=degree_i),其余为0。

    二.邻接矩阵(B)
    (B_{i,j})(i,j)两点之间的边的边权(如果有重边则视为边权累加)

    三.(Kirchhoff)(基尔霍夫)矩阵(L)
    (它也叫(Laplacian)(拉普拉斯)矩阵)
    (L_{i,j}=A_{i,j}-B_{i,j})
    注意不要反了

    四.关联矩阵(M)
    先给这个无向图定向,随便定向即可.

    [M_{i,j}=egin{cases} 1&点i为第j条边的起点 \ -1&点i为第j条边的终点\ 0 &其他情况 end{cases}]

    矩阵树定理

    (G)中生成树的边权之和为(L)的任意一个代数余子式的行列式(边权为1时就是生成树的个数)
    代数余子式:设(K_{i,j})(L)的一个代数余子式,则(K_{i,j})(L)的行列式删去第(i)行第(j)列之后的行列式(描述十分不严谨,感性理解一下)

    证明

    我们先看两个结论
    1.(BB^T=L)((B^T)(B)的转置矩阵)
    证明:
    (B^T_{i,j}=B_{j,i})
    (BB^T=K)

    [ K_{i,j}=sum_{k=1}^n B_{i,k}B^T_{k,j}\ =sum_{k=1}^nB_{i,k}B_{j,k}\ ]

    发现算出来就是(i,j)之间的边数(cdot -1)

    2.设(C,D)是两个矩阵(不一定是方阵,但要求(C)可以左乘(D)),则有
    (|CD|=sum_{s}C_{sk}D_{ks}),其中(s)为大小为(n)的子集((n)是这个矩阵的长和宽的最小值),(sum)后面的东西就是(C)只保留子集里面的数对应的列,(D)只保留对应的行,乘起来的东西。
    证明:我不会证

    3.(L)矩阵的一些性质
    (|L|=0)
    (L)每行每列的和都是0,高斯消元过后,行列式的值就是0
    当图不连通时,(L)的任意一个余子式(M_{i,i})为0
    当图是一棵树时,(L)的任意一个余子式(M_{i,i})为1
    当图是一棵树时,(L_{1,1}+1)后,(|L|=1),余子式(M_{i,i})为1
    证明感性理解一下叭

    我们设(L_i)表示(L)去掉第(i)行第(i)列后的矩阵,这样(|L_i|)就是(L)的一个代数余子式,根据上面的结论,可以得到
    (|L_i|=|B_iB^T_i|)(=sum_sB_{isk}B^T_{iks}=sum_s B_{isk}^2),其中(s)的大小就是(n-1)
    一个(s)就相当于从原图中找了(n-1)条边,结合上面的性质,如果这(s)条边可以组成树,则贡献为1,否则为0.枚举完所有的(s)之后的总贡献就是生成树是数量

  • 相关阅读:
    ansible register 之用法
    vim 多行注释和取消注释
    开启 ssh 的 root 登录
    HAproxy 添加多个配置文件
    1002. A+B for Polynomials (25)
    Java中浮点数能连续精确表示整数的范围
    1001. A+B Format (20)
    1003. 我要通过!(20)
    1009. 说反话 (20)
    1006. 换个格式输出整数 (15)
  • 原文地址:https://www.cnblogs.com/lcez56jsy/p/13184344.html
Copyright © 2011-2022 走看看