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

    Matrix-Tree 定理又称基尔霍夫矩阵树定理,其用于解决:给定 n 个点 m 条边的无向图,求图的生成树个数的问题。

    【基尔霍夫矩阵】
    1.基本定义

    1)无向图 G:给定 n 个点,m 条边的无向图,设点集为 V,边集为 E,则其记为 G(V,E)

    2)度数矩阵 D[G]:当 i≠j 时,D[i][j]=0,当 i=j 时,D[i][i]=点 vi 的度数

    3)邻接矩阵 A[G]:当 vi、vj 有边连接时,A[i][j]=1,当 vi、vj 无边连接时,A[i][j]=0

    4)基尔霍夫矩阵(Kirchhoff) K[G]:也称拉普拉斯算子,其定义为 K[G]=D[G]-A[G],即:K[i][j]=D[i][j]-A[i][j]

    2.基尔霍夫矩阵性质

    对于任意一个图 G,其基尔霍夫矩阵 K 具有以下性质:

        基尔霍夫矩阵 K 的每一行或每一列上的元素和都是 0
        基尔霍夫矩阵 K 的行列式的值为 0
        基尔霍夫矩阵 K 的任意一个代数余子式值都相同
        如果图 G 不连通,基尔霍夫矩阵 K 的任意主子式行列式值为 0
        如果图 G 是一棵树,基尔霍夫矩阵 K 的任意一个 n-1 阶主子式的行列式为 1

    定理的证明过于困难不多做赘述了

    我们来看一道例题

     

     本题并不是无向图的矩阵树定理了 而是加强版的有向树的矩阵树定理。我们需要做的改动是将1这个点设置为根节点,然后最后得到的矩阵应该是删除1这个元素得到的矩阵的值。

    关于矩阵树定理用于有向图生成树计数:

    ①内向树生成树计数。
    A为邻接矩阵, D为出度矩阵。
    C=D−A。
    以root为根的内向生成树个数为C的余子式M[root,root]的行列式。
    ②外向树生成树计数。
    A为邻接矩阵, D为入度矩阵。
    C=D−A。
    以root为根的外向生成树个数为C的余子式M[root,root]的行列式。

    本题是外向生成树计数

    AC代码

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 260;
    const int MODE = 10007;
    int n, m;
    int a[N][N];	//a为入度矩阵
    int c[N][N];
    int d[N][N];	//d为度数矩阵
    int ans;
    
    void gauss() {//高斯求和法 线性代数讲过 不多累述
    	for(int i = 1; i < n; ++i) {
    		for(int j = i + 1; j < n; ++j) {
    			while(c[j][i]) {
    				int x = c[i][i] / c[j][i];
    				for(int k = i; k < n; ++k) {
    					c[i][k] = (c[i][k] - x * c[j][k] % MODE) % MODE;
    				}
    				swap(c[i], c[j]);
    				ans = -ans;
    			}
    		}
    		ans = (ans * c[i][i] % MODE + MODE) % MODE;
    	}
    }
    
    int main () {
    	scanf("%d%d", &n, &m);
    	for(int u, v, i = 1; i <= m; ++i) {
    		scanf("%d%d", &v, &u);
    		++d[v][v];
    		++a[u][v];
    	}
    	for(int i = 2; i <= n; ++i) {
    		for(int j = 2; j <= n; ++j) {
    			c[i - 1][j - 1] = d[i][j] - a[i][j];
    		}
    	}
    	ans = 1;
    	gauss();
    	printf("%d
    ", ans);
    }
    
    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Unique Encryption Keys 暴力学习map,vector 函数
    hdu 1250 Hat's Fibonacci
    匈牙利算法模板 图的二分匹配 hdu 2063 过山车
    hdu 4260 汉诺塔问题 The End of The World
    各种常见文件的hex文件头
    Ubuntu & node.js
    Linux周期性任务的执行指令配置
    MySQL各版本的性能特性(从4.0版本开始)
    Tsung 1.5.0 增加对 WebSocket 和 BOSH 的支持
    ShowSlow+Yslow环境搭建
  • 原文地址:https://www.cnblogs.com/lightac/p/12737996.html
Copyright © 2011-2022 走看看