【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 ...
随机推荐
- noj->电子老鼠走迷宫
00 问题 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路.电子老鼠可以在路上向上.下.左.右行走,每一步走一个格子.现给定一个起 ...
- Less-(26~28) preg_replace3
Less-26: 核心语句: 各种回显均存在. 本题相比Less-25,多屏蔽了很多符号: 首先是各种注释符 --+,#,/**/ . /[]/表示字符集合:任何出现在里面的字符均会被替换. 屏蔽 ...
- tomcat内存马原理解析及实现
内存马 简介 Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站.应用.但传统的Webshell都是基于文件类型的,黑客 ...
- 6月8日 Scrum Meeting
日期:2021年6月8日 会议主要内容概述: 确定6.9日下午两点到五点集中对接 初步确定主题配色和echarts默认图表颜色 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作 ...
- pyqgis学习细节
关于LIKE通配符:LIKE的意思是模糊匹配,可以和% _搭配,%指的是任意字符,_指的是任一字符.
- palindrome-partitioning leetcode C++
Given a string s, partition s such that every substring of the partition is a palindrome. Return all ...
- poj 3020 Antenna Placement(二分图最大匹配)
题意: N行M列的矩阵,每个格子里不是 * 就是 O . * :是一个利益点. O:是一个空白点. 每次可以用一个圈覆盖相邻的两个*.(左右相邻或上下相邻). 问最少需要多少个圈可以覆盖所有的*. 思 ...
- 从拥有一个阿里云账号开始使用Maxcompute
本教程并不会创建子账户来管理maxcompute,是直接使用主账号来对maxcompute进行管理(强烈不推荐在生产环境中这样做!!) Step1:创建阿里云账号并实名认证 创建一个阿里云账号(使 ...
- 分布式技术-Zookeeper概述
概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目 在大数据技术生态圈中,zookeeper(动物管理员),Hadoop(大象),Hive(蜜蜂),Pig(猪) ...
- SimpleNVR流媒体服务在多分屏直播实时阅览时所遇到问题的解决
视频有一个流的概念,称为流媒体.当大量的客户端或WEB访问监控摄像机的时候,大多数的录像机无法承受那么大的网络压力,这时候SimpleNVR流媒体服务器的优势就显示出来了.其能将客户端的访问压力转到服 ...