【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 ...
随机推荐
- DM8数据库单机安装
一.系统概要 表1 部署情况一览表 操作系统 Windows10 数据库版本 DM8(开发版) 数据库类型 单机 磁盘挂载 无 Key信息 无 二.操作系统信息检查 2.1 操作系统版本 [root@ ...
- Linux主机入侵检测
检查系统信息.用户账号信息 ● 操作系统信息 cat /proc/version 用户信息 用户信息文件 /etc/passwd root:x:0:0:root:/root:/bin/bash 用户名 ...
- 吴恩达课后习题第二课第三周:TensorFlow Introduction
目录 第二课第三周:TensorFlow Introduction Introduction to TensorFlow 1 - Packages 1.1 - Checking TensorFlow ...
- 【二食堂】Beta - Scrum Meeting 10
Scrum Meeting 10 例会时间:5.25 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 继续文本导入.保存部分的工作issue 2. 完成了技术博客 1. 继续文 ...
- BUAA-软件工程第一次作业
软件工程第一次作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标 团队完成好的软件,并对自己作出规划 这个作 ...
- uvm中类继承和phase
1,uvm中类继承关系如下所示 2,uvm中phase如下所示
- 确定两串乱序同构 牛客网 程序员面试金典 C++ Python
确定两串乱序同构 牛客网 程序员面试金典 C++ Python 题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串中 ...
- Centos 系统常用编译环境
centos编译环境配置 yum install -y autoconf make automake gcc gcc-c++
- element-UI 中的upload组件如何添加token?
<el-upload :show-file-list="false" :on-error="errmsg" :headers="headers& ...
- Centos8上安装Mysql8.X
一.下载Mysql 下载地址:https://dev.mysql.com/downloads/mysql/ 二.将压缩包通过ftp软件服务器的目标位置:并解压 1.我的是放在:/root/softwa ...