题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元.) //注意题目是将所有房间(这些才是点)连成一棵树,墙非节点,即行列式中只存在表示房间的点.否则就很可能无解了.. #include <cstdio> #include <algorithm> #define mod (1000000000) const int N=103,way[…
传送门 解题思路 矩阵树定理模板题.矩阵树定理是求图中最小生成树个数,做法是首先求出基尔霍夫矩阵,就是度数矩阵\(-\)邻接矩阵.然后再求出这个矩阵的行列式,行列式的求法就是任意去掉一行一列,然后高斯消元消成上三角,对角线乘积即为行列式.注意到这里有取模,所以要辗转相除. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4031 矩阵树定理的模板题(第一次的矩阵树定理~): 有点细节,放在注释里了. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; int const mod=1e9; ][],d[][],sid[][],tot,…
Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一些相邻房间的墙,使得所有房间能够互相到达.在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙).同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路.现在,你希望统计一共有多少种可行的方案. Input 第一行两个数分别表示n和m. 接下来n…
题目链接 BZOJ4031 题解 第一眼:这不裸的矩阵树定理么 第二眼:这个模\(10^9\)是什么鬼嘛QAQ 想尝试递归求行列式,发现这是\(O(n!)\)的.. 想上高斯消元,却又处理不了逆元这个东西.. 无奈去翻题解,,, 发现可以用类似辗转相除法去消,而避免除法,,, 这样子依旧是每次一行减去另一行乘一个数,行列式不变 orz #include<algorithm> #include<iostream> #include<cstring> #include<…
题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一些相邻房间的墙,使得所有房间能够互相到达.在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙).同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路.现在,你希望统计一共有多少种可行的方案. 题解 其实题目的意思就是让你求这张图的生成树个数. 下面是玄学时…
题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一些相邻房间的墙,使得所有房间能够互相到达.在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙).同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路.现在,你希望统计一共有多少种可行的方案. 输入 第一行两个数分别表示n和m. 接下来n行,每行m个字符,每…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4031 [题目大意] 你突然有了一个大房子,房子里面有一些房间. 事实上,你的房子可以看做是一个包含n*m个格子的格状矩形, 每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一些相邻房间的墙,使得所有房间能够互相到达. 在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙). 同时,你不希望在房子中有小偷的时候会很难抓, 所以你希望任意…
http://www.lydsy.com/JudgeOnline/problem.php?id=4031 裸题........ 问题在于模数是$10^9$ 我们发现消元的目的是让一个地方为0 辗转相除法也可以做到这一点 只不过取模用减整除来代替就好了 注意本题需要分配$id$,因为柱子不能算 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #inclu…
背结论 : 度-邻 CODE1 O(n3logn)O(n^3logn)O(n3logn) #include <bits/stdc++.h> using namespace std; typedef long long LL; template<class T>inline void read(T &num) { register char ch; register int flg = 1; while(!isdigit(ch=getchar()))if(ch=='-')fl…