专题做完了还是要说两句留下什么东西的. 矩阵树定理通俗点讲就是: 建立矩阵A[i][j]=edge(i,j),(i!=j).即矩阵这一项的系数是两点间直接相连的边数. 而A[i][i]=deg(i).即对角线上都是这个点的度数. 得到这个矩阵后,随便删掉一行一列后进行高斯消元得到上三角矩阵,对角线上值的积就是生成树的个数.(就是行列式) 顺便提一下行列式的性质: 交换两行/列,行列式的值变为相反数. 一行的每一项减去另一行的若干倍,行列式不变. 一行的每一项都乘一个常数,行列式也乘这个常数. 到…
loj6271 「长乐集训 2017 Day10」生成树求和 加强版(矩阵树定理,循环卷积) loj 题解时间 首先想到先分开三进制下每一位,然后每一位分别求结果为0,1,2的树的个数. 然后考虑矩阵树求出来的是树的边权之积的和,而我们要求树的边权的不进位三进制和的和. 由于矩阵树求出来的是树的边权之积的和,考虑暴力上生成函数求解循环卷积,结果就是 $ c $ 的项的系数和. 但很明显生成函数暴力算是没得整的. 所以我们想到了利用单位根实现的k进制FWT. 很幸运的 $ \omega_{ 3 }…
最近集中学习了一下矩阵树定理,自己其实还是没有太明白原理(证明)类的东西,但想在这里总结一下应用中的一些细节,矩阵树定理的一些引申等等. 首先,矩阵树定理用于求解一个图上的生成树个数.实现方式是:\(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_{…
[LOJ#6072]苹果树(矩阵树定理,折半搜索,容斥) 题面 LOJ 题解 emmmm,这题似乎猫讲过一次... 显然先\(meet-in-the-middle\)搜索一下对于每个有用的苹果数量,满足权值小于\(lim\)的方案数 ,那么只需要考虑它们构成生成树的方案数就好了. 显然有用的可以和所有的有用的或者是坏的连边,好的但不有用的只能和坏的连边,而坏的随意. 但是这样子算出来的结果是至多,因此还需要额外容斥一下计算生成树的个数. #include<iostream> #include&…
题目描述 给出 $n$ 个点和 $n-1$ 种颜色,每种颜色有若干条边.求这张图多少棵每种颜色的边都出现过的生成树,答案对 $10^9+7$ 取模. 输入 第一行包含一个正整数 N(N<=17), 表示城市个数. 接下来 N-1 行,其中第 i行表示第 i个建筑公司可以修建的路的列表: 以一个非负数mi 开头,表示其可以修建 mi 条路,接下来有mi 对数, 每对数表示一条边的两个端点.其中不会出现重复的边,也不会出现自环. 输出 仅一行一个整数,表示所有可能的方案数对 10^9 + 7 取模的…
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1805 题意: A和B之间有a条边,A和G之间有b条边,B和G之间有c条边.现在从A点出发走遍所有的边,然后再回到A点,问一共有多少种方法. 思路: 16年湖南省赛题目,这道题目是求欧拉回路的个数,和生成树的计数有一定的联系. 首先给出神奇的Best定理,这是什么鬼定理,反正查不到什么有关该定理的文章... $ec(G)=t_s(G)\cdot deg(s)! \cdot \prod_{v\i…
http://www.lydsy.com/JudgeOnline/problem.php?id=2467 题意: 思路:要用矩阵树定理不难,但是这里的话需要取模,所以是需要计算逆元的,但是用辗转相减会更简单. 引用一大神博客里的介绍:http://blog.csdn.net/u013010295/article/details/47451451 值得一提的是,有些题目要求行列式模上一个数的结果.怎么求模意义下的行列式呢?这些题答案都比较大,用浮点数的话精度达不到要求,确实是一个问题.(显然强行用…
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1002 题目大意: 给定n(N<=100),编程计算有多少个不同的n轮状病毒 思路: 大部分题解都是直接一个递推公式,具体得来的方法由矩阵树定理可以求得. 只是求矩阵的行列式的时候比较复杂. 具体证明过程:http://vfleaking.blog.163.com/blog/static/17480763420119685112649/ 需要高精度 #include <bits/st…
题目描述 给定一个 $n\times m$ 的方格图,每个格子有 ↑.↓.←.→,表示从该格子能够走到相邻的哪个格子.有一些格子是空着的,需要填上四者之一,需要满足:最终的方格图中,从任意一个位置出发都能够走出方格图.求方案数 mod 10^9+7. $数据组数\le 10$ ,$n,m\le 300$ ,$空格子数k\le 200$ 题解 并查集+矩阵树定理 由于k很小,又是计数问题,考虑矩阵树定理. 先使用并查集处理出从每个位置开始,最终会走到哪个位置.显然如果有环则答案为0,否则一定走到的…