【Matrix-tree Theorem学习笔记】
定义度数矩阵\(D(G)\):
定义邻接矩阵\(C(G)\):
定义\(Laplace\)矩阵\(A\)
\(
A(G) = D(G) - C(G)
\)
记图\(G\)的所有生成树权值和为\(t(G)\)
一颗树形结构的权值为该树所有边权的积
无向图情况:
如果存在一条边\((x,y,w)\)
则\(D_{x,x},D_{y,y} += w\)
则\(C_{x,y},C_{y,x} += w\)
则\(A\)删除根节点对应的行和列,剩下的\(n - 1\)阶主子式则是权值之和
有向图情况:
如果存在一条边\((x,y,w)\)
如果统计根向树形图则\(D_{x,x} += w\)
如果统计外向树形图则\(D_{y,y} += w\)
两种情况都为
\(C_{x,y} += w\)

权设为\(1\)则可以统计生成树个数。
矩阵树
#include<iostream>
#include<cstdio>
#define ll long long
#define N 305
#define mod 1000000007
#define inv(x) (fpow(x,mod - 2))
ll n,m,typ;
ll a[N][N];
ll fpow(ll x,ll k){
ll ans = 1;
while(k){
if(k & 1)
ans = ans * x % mod;
x = x * x % mod;
k >>= 1;
}
return ans;
}
void del(int r){
for(int i = 1;i <= n;++i)
for(int j = 1;j <= n;++j){
if(i != r && j != r){
ll x = i > r ? i - 1 : i;
ll y = j > r ? j - 1 : j;
a[x][y] = a[i][j];
}
}
}
ll det(){
ll ans = 1;
for(int i = 1;i <= n;++i){
if(!a[i][i]){
for(int j = i + 1;j <= n;++j){
if(a[j][i]){
for(int k = 1;k <= n;++k)
std::swap(a[i][k],a[j][k]);
ans -= ans;
break;
}
}
}
ll t = inv(a[i][i]);
for(int j = i + 1;j <= n;++j){
ll f = a[j][i] * t % mod;
for(int k = i;k <= n;++k)
a[j][k] = (a[j][k] - a[i][k] * f % mod) % mod;
}
}
for(int i = 1;i <= n;++i)
ans = ans * a[i][i] % mod;
return (ans % mod + mod) % mod;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&typ);
ll x,y,z;
for(int i = 1;i <= m;++i){
scanf("%lld%lld%lld",&x,&y,&z);
if(x != y){
if(typ == 0){
a[x][x] = (a[x][x] + z) % mod,a[y][y] = (a[y][y] + z) % mod;
a[x][y] = (a[x][y] - z) % mod,a[y][x] = (a[y][x] - z) % mod;
}else{
a[y][y] = (a[y][y] + z) % mod;
a[x][y] = (a[x][y] - z) % mod;
}
}
}
del(1);
n -= 1;
std::cout<<det()<<std::endl;
}
【Matrix-tree Theorem学习笔记】的更多相关文章
- 【机器学习】决策树(Decision Tree) 学习笔记
[机器学习]决策树(decision tree) 学习笔记 标签(空格分隔): 机器学习 决策树简介 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树).其每个非叶节点表示一个 ...
- 树上启发式合并(dsu on tree)学习笔记
有丶难,学到自闭 参考的文章: zcysky:[学习笔记]dsu on tree Arpa:[Tutorial] Sack (dsu on tree) 先康一康模板题吧:CF 600E($Lomsat ...
- [dsu on tree]【学习笔记】
十几天前看到zyf2000发过关于这个的题目的Blog, 今天终于去学习了一下 Codeforces原文链接 dsu on tree 简介 我也不清楚dsu是什么的英文缩写... 就像是树上的启发式合 ...
- 设备树(device tree)学习笔记
作者信息 作者:彭东林 邮箱:pengdonglin137@163.com 1.反编译设备树 在设备树学习的时候,如果可以看到最终生成的设备树的内容,对于我们学习设备树以及分析问题有很大帮助.这里我们 ...
- 设备树(device tree)学习笔记【转】
转自:https://www.cnblogs.com/pengdonglin137/p/4495056.html 阅读目录(Content) 1.反编译设备树 2.分析工具fdtdump 3.Linu ...
- 「Link-Cut Tree」学习笔记
Link-Cut Tree,用来解决动态树问题. 宏观上,LCT维护的是森林而非树.因此存在多颗LCT.有点像动态的树剖(链的确定通过$Access$操作),每条链用一颗$splay$维护.$spla ...
- Note -「Dsu On Tree」学习笔记
前置芝士 树连剖分及其思想,以及优化时间复杂度的原理. 讲个笑话这个东西其实和 Dsu(并查集)没什么关系. 算法本身 Dsu On Tree,一下简称 DOT,常用于解决子树间的信息合并问题. 其实 ...
- [学习笔记]Dsu On Tree
[dsu on tree][学习笔记] - Candy? - 博客园 题单: 也称:树上启发式合并 可以解决绝大部分不带修改的离线询问的子树查询问题 流程: 1.重链剖分找重儿子 2.sol:全局用桶 ...
- Matrix_tree Theorem 矩阵树定理学习笔记
Matrix_tree Theorem: 给定一个无向图, 定义矩阵A A[i][j] = - (<i, j>之间的边数) A[i][i] = 点i的度数 其生成树的个数等于 A的任意n ...
随机推荐
- Kubernetes client-go 源码分析 - Reflector
概述入口 - Reflector.Run()核心 - Reflector.ListAndWatch()Reflector.watchHandler()NewReflector()小结 概述 源码版本: ...
- DOS命令和快捷键
- javascript-jquery对象的属性处理
1.attr()方法:获取元素某个属性的值. $("img").attr("title");//获得第一个<img>元素的title属性 $(&qu ...
- mybatis中的#和$的区别 以及 防止sql注入
声明:这是转载的. mybatis中的#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sq ...
- 【Linux命令063】Linux非常简单常用的入门命令
Linux常用命令 这是一篇我在公众号上发布的文章,还算较为受欢迎. 博客园这边荒废好长时间了,主要是最近一年经常撰写的文章都是Linux相关的入门文章. 不知道是否能通过博客园的首页审核. 1.cd ...
- C语言编程基础有网盘资料哦
刚开始看STM32的库函数,会有很多疑惑,例如指针怎么用,结构体跟指针怎么配合,例如函数的参数有什么要求,如何实时更新IO口的数据等.如果重新进行C语言的学习,那么要学很久才能够系统地认识.本文则将比 ...
- 我为啥开始用CSDN博客
今晚开通CSDN博客,并且决定以后每天都使用这个不错的东西.与此同时,在博客园也开通了一个:http://www.cnblogs.com/fish7/ 我原本是把做过的题都用WPS整理的,然后每次打印 ...
- (1)Zookeeper在linux环境中搭建集群
1.简介 ZooKeeper是Apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务.同步服务和命名注册.ZooKeeper的架构通过冗余服务实现高可用性.Zookeeper ...
- 小白都能看懂的Spring源码揭秘之IOC容器源码分析
目录 前言 IOC 只是一个 Map 集合 IOC 三大核心接口 IOC 初始化三大步骤 定位 加载 注册 总结 前言 在 Spring 框架中,大家耳熟能详的无非就是 IOC,DI,Spring M ...
- [WPF] 玩玩彩虹文字及动画
1. 前言 兴致来了玩玩 WPF 的彩虹文字.不是用 LinearGradientBrush 制作渐变色那种,是指每个文字独立颜色那种彩虹文字.虽然没什么实用价值,但希望这篇文章里用 ItemsCon ...