Matrix_tree Theorem: 给定一个无向图, 定义矩阵A A[i][j] = - (<i, j>之间的边数) A[i][i] = 点i的度数 其生成树的个数等于 A的任意n - 1阶主子式的值. 关于定理的相关证明 可以看这篇文章, 讲得非常详细, 耐心看就能看懂: 关于求行列式, 可以用高斯消元. 如果是模域下求行列式, 可以用欧几里得算法. 具体实现看这篇文章 模域下求行列式 模板题:SPOJ DETER3 代码: #include <cstdio> #inclu…
题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一些相邻房间的墙,使得所有房间能够互相到达.在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙).同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路.现在,你希望统计一共有多少种可行的方案. 题解 其实题目的意思就是让你求这张图的生成树个数. 下面是玄学时…
sro_ptx_orz qwq算是一个套路的记录 对于一个有向图来说 如果你要求一个外向生成树的话,那么如果存在一个\(u\rightarrow v\)的边 那么\(a[u][v]--,a[v][v]++\) 对应的去掉第\(i\)行和第\(i\)列的余子式,就是以\(i\)为根的生成树个数. 内向生成树也是同理.所有的反过来即可 #include<iostream> #include<cstdio> #include<algorithm> #include<cs…
终于学到这个了,本来准备省选前学来着的? 前置知识:矩阵行列式 矩阵树定理 矩阵树定理说的大概就是这样一件事:对于一张无向图 \(G\),我们记 \(D\) 为其度数矩阵,满足 \(D_{i,i}=\text{点}i\text{的度数}\),\(D_{i,j}=0(i\ne j)\),再记 \(A\) 为其邻接矩阵,满足 \(A_{i,j}=i,j\text{之间边的条数}\),如果有重边则算作多条边. 设 \(K=D-A\),那么去掉 \(K\) 第 \(k\) 行第 \(k\) 列(\(k\…
  大概--会很简洁吧 qwq. 矩阵树定理   对于无自环无向图 \(G=(V,E)\),令其度数矩阵 \(D\),邻接矩阵 \(A\),令该图的 \(\text{Kirchhoff}\) 矩阵 \(K=D-A\).取其任意一个 \(n-1\) 阶主子式 \(K'\),则 \(G\) 的生成树个数 \(s=\det K'\).   证明先咕掉 qwq. 一些推广   对于有向图以 \(r\) 为根的内向生成树,取 \(D\) 为初度矩阵,取主子式时删去 \(r\) 行 \(r\) 列,再求行列…
专题做完了还是要说两句留下什么东西的. 矩阵树定理通俗点讲就是: 建立矩阵A[i][j]=edge(i,j),(i!=j).即矩阵这一项的系数是两点间直接相连的边数. 而A[i][i]=deg(i).即对角线上都是这个点的度数. 得到这个矩阵后,随便删掉一行一列后进行高斯消元得到上三角矩阵,对角线上值的积就是生成树的个数.(就是行列式) 顺便提一下行列式的性质: 交换两行/列,行列式的值变为相反数. 一行的每一项减去另一行的若干倍,行列式不变. 一行的每一项都乘一个常数,行列式也乘这个常数. 到…
In some countries building highways takes a lot of time... Maybe that's because there are many possiblities to construct a network of highways and engineers can't make up their minds which one to choose. Suppose we have a list of cities that can be c…
[LOJ#6072]苹果树(矩阵树定理,折半搜索,容斥) 题面 LOJ 题解 emmmm,这题似乎猫讲过一次... 显然先\(meet-in-the-middle\)搜索一下对于每个有用的苹果数量,满足权值小于\(lim\)的方案数 ,那么只需要考虑它们构成生成树的方案数就好了. 显然有用的可以和所有的有用的或者是坏的连边,好的但不有用的只能和坏的连边,而坏的随意. 但是这样子算出来的结果是至多,因此还需要额外容斥一下计算生成树的个数. #include<iostream> #include&…
最近集中学习了一下矩阵树定理,自己其实还是没有太明白原理(证明)类的东西,但想在这里总结一下应用中的一些细节,矩阵树定理的一些引申等等. 首先,矩阵树定理用于求解一个图上的生成树个数.实现方式是:\(A\)为邻接矩阵,\(D\)为度数矩阵,则基尔霍夫(Kirchhoff)矩阵即为:\(K = D - A\).具体实现中,记 \(a\) 为Kirchhoff矩阵,则若存在 \(E(u, v)\) ,则\(a[u][u] ++, a[v][v] ++, a[u][v] --, a[v][u] --\…
题目链接 CF917D:https://codeforces.com/problemset/problem/917/D TopCoder13369:https://community.topcoder.com/stat?c=problem_statement&pm=13369 题解 首先分析 CF917D. 我们考虑能否将树上的边的贡献特殊表现出来. 记原树为 \(T\),我们构造一幅 \(n\) 个结点的无向完全图,并设置一个值 \(x\),对于无向边 \((u, v)\),其权值 \(w_{…