图论数学:矩阵树定理
运用矩阵树定理进行生成树计数
给定一个n个点m条边的无向图,问生成树有多少种可能
直接套用矩阵树定理计算即可
矩阵树定理的描述如下:
首先读入无向图的邻接矩阵,u-v G[u][v]++ G[v][u]++
度数矩阵: u-v D[u][u]++ D[v][v]++;
然后计算图G的基尔霍夫矩阵 C=D-G
接着去掉基尔霍夫矩阵的第i行和第i列(必须都是i,i取任意值)
计算剩下的子矩阵的行列式的值得绝对值即为生成树个数
然后对于有向图来说:
边 u->v G[u][v]++ 然后是D[v][v]++(有向图的度数矩阵指的是入度而不是出度)
这样根据上述步骤计算得来的是树形图的个数
在计算行列式的时候:
先用高斯消元消成上三角矩阵,再把对角线乘起来
(与乘法逆元相关的以后再展开)
下面介绍实现:
const int maxn=15; int A[maxn][maxn],B[maxn][maxn]; double a[maxn][maxn]; int T,n,m;
B是邻接矩阵,A是度数矩阵
a是基尔霍夫矩阵
我们在读入了n之后n--的目的是直接排除最后一行和最后一列将其变成余子式(是叫这个嘛??)
然后是计算行列式:
void gauss() {int now=1;for(int i=1;i<=n;i++){int j=now;while(fabs(a[j][now])<eps&&j<=n) j++;if(j==n+1) {puts("0");return;}for(int k=1;k<=n;k++) swap(a[now][k],a[j][k]);for(int j=now+1;j<=n;j++){double t=a[j][now]/a[now][now];for(int k=1;k<=n;k++)a[j][k]-=t*a[now][k];}now++;}double ans=1;if(n&1) ans=-ans;for(int i=1;i<=n;i++) ans*=a[i][i];printf("%.0lf\n",abs(ans)); }
这里的高斯消元是消成上三角矩阵,然后就方便计算det了
完整的实现如下:
1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<algorithm> 5 #define eps 1e-8 6 using namespace std; 7 const int maxn=15; 8 int A[maxn][maxn],B[maxn][maxn]; 9 double a[maxn][maxn]; 10 int T,n,m; 11 int read() 12 { 13 int x=0,f=1;char ch=getchar(); 14 while(ch<'0'||ch>'9') {if(ch=='-')f=-1; ch=getchar();} 15 while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();} 16 return x*f; 17 } 18 void gauss() 19 { 20 int now=1; 21 for(int i=1;i<=n;i++) 22 { 23 int j=now; 24 while(fabs(a[j][now])<eps&&j<=n) j++; 25 if(j==n+1) {puts("0");return;} 26 for(int k=1;k<=n;k++) swap(a[now][k],a[j][k]); 27 for(int j=now+1;j<=n;j++) 28 { 29 double t=a[j][now]/a[now][now]; 30 for(int k=1;k<=n;k++) 31 a[j][k]-=t*a[now][k]; 32 } 33 now++; 34 } 35 double ans=1; 36 if(n&1) ans=-ans; 37 for(int i=1;i<=n;i++) ans*=a[i][i]; 38 printf("%.0lf\n",abs(ans)); 39 } 40 int main() 41 { 42 T=read(); 43 while(T--) 44 { 45 memset(A,0,sizeof(A)); 46 memset(B,0,sizeof(B)); 47 n=read();m=read(); 48 n--; 49 for(int i=1;i<=m;i++) 50 { 51 int u=read(),v=read(); 52 u--;v--; 53 A[u][u]++;A[v][v]++; 54 B[u][v]++;B[v][u]++; 55 } 56 for(int i=1;i<=n;i++) 57 { 58 for(int j=1;j<=n;j++) 59 a[i][j]=A[i][j]-B[i][j]; 60 } 61 gauss(); 62 } 63 return 0; 64 }
转载于:https://www.cnblogs.com/aininot260/p/9426134.html
图论数学:矩阵树定理相关推荐
- P3317-[SDOI2014]重建【矩阵树定理,数学期望】
正题 题目链接:https://www.luogu.com.cn/problem/P3317 题目大意 nnn个点若干条边.告诉你每条边出现的概率,求刚好出现一颗生成树的概率是多少. 解题思路 矩阵树 ...
- 学习小记-----行列式矩阵树定理Kirchhoff's theorem
为什么我的标题要加上Kirchhoff's theorem呢,是因为之前我查这个定理是用这个英文在谷歌上查的,然后,,,,我看了20多分钟的英文维基百科,然后爬墙去做别的题目了QAQ 行列式 前置知识 ...
- 行列式入门与矩阵树定理完整证明
文章目录 前置技能 行列式 定义 性质 拉普拉斯展开 线性性 可乘性 可加性 不重性 可倍加性 转置不变性 可交换性 行可交换性 列可交换性 优化行列式的计算 矩阵树定理 前置定义 一些引理 转置引理 ...
- 矩阵树定理2020HDU多校第6场j-Expectation[位运算+期望]
矩阵树定理 用于求解图上面生成树的个数,生成树的个数等于基尔霍夫矩阵的任何一个N-1阶主子式的行列式的绝对值 矩阵树模板 struct Matrix_Tree {ll a[N][N];Matrix_T ...
- Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理) Problem n≤1 ...
- 【学习笔记】矩阵树定理(Matrix-Tree)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 一.矩阵树定理 二.常用定理 三.例题 1. Luogu P6178 [模板]Matrix-Tr ...
- [CF917D]Stranger Trees[矩阵树定理+解线性方程组]
题意 给你 \(n\) 个点的无向完全图,指定一棵树 \(S\),问有多少棵生成树和这棵树的公共边数量为 \(k\in[0,n-1]\) \(n\leq 100\) 分析 考虑矩阵树定理,把对应的树边 ...
- HDU多校6 - 6836 Expectation(矩阵树定理+高斯消元求行列式)
题目链接:点击查看 题目大意:给出一张由 n 个点和 m 条边组成的无向图,对于任意一个生成树,其权值为 n - 1 条边的边权进行二进制的 and 运算,现在需要在图中任意选择一个生成树,问期望权值 ...
- Wannafly挑战赛23F-计数【原根,矩阵树定理,拉格朗日插值】
正题 题目链接:https://ac.nowcoder.com/acm/contest/161/F 题目大意 给出nnn个点的一张图,求它的所有生成树中权值和为kkk的倍数的个数.输出答案对ppp取模 ...
最新文章
- BZOJ 4032: [HEOI2015]最短不公共子串(后缀自动机+记忆化搜索)
- vue 返回上一页传参_H5页面与微信小程序相互跳转并传参(web-view)
- oracle事务数统计,Oracle 查询事务数
- 非结构化商业文本中隐私信息识别-第2名方案(含数据)
- php api框架 登录验证码,thinkphp3.2 框架如何使用验证码
- MATLAB--数字图像处理 频域图像分析
- linux服务器中安装SVN,linux服务器安装svn并上传项目
- RubyOnRails开发知识链接汇总
- Python机器学习:基于西瓜数据集的KNN算法实现
- python查火车票_Python查询火车票(三)
- android 圆形背景文字,android圆形图片,圆形背景文字的CircleTextImageView开源组件
- 微信点餐系统——用Enum枚举来保存商品状态
- python if continue的用法_Python continue语句用法实例
- java熔断器_详解spring cloud分布式关于熔断器
- shouldoverrideurlloading为什么有时候不走_心理学:为什么很多看似不般配的人,往往都能走到最后?...
- [开源名人录] Fabrice Bellard
- 地方政府不愿房价下跌 救市或化解房地产调控
- HTTP Host 字段作用
- Gartner发布2022年数据分析十二大趋势:数据和分析将成为创新起源
- 6-2 计算长方体的表面积和体积
热门文章
- Objective-C:MRC(引用计数器)获得对象所有权的方式(init、retain、copy等)
- 【MVC】ASP.Net MVC 4项目升级MVC 5的方法
- 沙利文:奢侈品防伪领域RFID技术作用巨大
- 利用Perl生成随机复杂密码
- Devexpress TreeList控件绑定显示父子节点对像
- UITableView 滑动删除
- RHEL5.5 安装 oracle 11g
- 第25节 典型应用集成技术
- [20190401]跟踪dbms_lock.sleep调用.txt
- WordPress整站轻松开启HTTPS