矩阵树定理学习
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代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #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\n" , ans); } |
出处:https://www.cnblogs.com/lightac/
联系:
Email: dzz@stu.ouc.edu.cn
QQ: 1171613053
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 从零开始开发一个 MCP Server!
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档