生成树计数模板 spoj 104 (不用逆元的模板)
/*
这种题,没理解,只是记一记如何做而已;
生成树的计数--Matrix-Tree定理 题目:SPOJ104(Highways)
题目大意:
*一个有n座城市的组成国家,城市1至n编号,其中一些城市之间可以修建高速公路;
*需要有选择的修建一些高速公路,从而组成一个交通网络;
*计算有多少种方案,使得任意两座城市之间恰好只有一条路径; 步骤: 先按输入数据建图:C[u][v]=C[v][u]=-1;degree[u]++; degree[v]++;
再去掉一行一列,用计算行列式的某个方法去计算就好了。。
*/ #include<bits/stdc++.h>
using namespace std;
const int N=;
typedef long long LL;
int degree[N];
LL C[N][N];
LL det(LL a[][N],int n){
LL ret=;
for(int i=; i<n; i++){ //从一开始,去掉了0这一列;
for(int j=i+; j<n; j++)
while(a[j][i]){
LL t=a[i][i]/a[j][i];
for(int k=i; k<n; k++)
a[i][k]=(a[i][k]-a[j][k]*t);
for(int k=i; k<n; k++)
swap(a[i][k],a[j][k]);
ret=-ret;
}
if(a[i][i]==)return ;
ret=ret*a[i][i];
}
if(ret<)ret=-ret;
return ret;
}
int main(){
int tcase;cin>>tcase;
while(tcase--){
memset(degree,,sizeof(degree));
memset(C,,sizeof(C));
int n,m,u,v;
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d",&u,&v);
u--;v--;
C[u][v]=C[v][u]=-;
degree[u]++;
degree[v]++;
}
for(int i=; i<n; ++i)
C[i][i]=degree[i];
printf("%lld\n",det(C,n));
}
return ;
}
/*
input: output:
4 8
4 5 1
3 4 1
4 2 3
2 3
1 2
1 3 2 1
2 1 1 0 3 3
1 2
2 3
3 1
*/
生成树计数模板 spoj 104 (不用逆元的模板)的更多相关文章
- 生成树计数 lighting 最终决定用这个模板! (有逆元的模板)
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> # ...
- SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)
题目链接 \(Description\) 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边). 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只 ...
- SPOJ 104 HIGH - Highways 生成树计数
题目链接:https://vjudge.net/problem/SPOJ-HIGH 解法: 生成树计数 1.构造 基尔霍夫矩阵(又叫拉普拉斯矩阵) n阶矩阵 若u.v之间有边相连 C[u][v]=C[ ...
- SPOJ - HIGH :Highways (生成树计数)
Highways 题目链接:https://vjudge.net/problem/SPOJ-HIGH Description: In some countries building highways ...
- kuangbin带你飞 生成树专题 : 次小生成树; 最小树形图;生成树计数
第一个部分 前4题 次小生成树 算法:首先如果生成了最小生成树,那么这些树上的所有的边都进行标记.标记为树边. 接下来进行枚举,枚举任意一条不在MST上的边,如果加入这条边,那么肯定会在这棵树上形成一 ...
- spoj 104 Highways(Matrix-tree定理)
spoj 104 Highways 生成树计数,matrix-tree定理的应用. Matrix-tree定理: D为无向图G的度数矩阵(D[i][i]是i的度数,其他的为0),A为G的邻接矩阵(若u ...
- @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列
目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...
- UVA10766:Organising the Organisation(生成树计数)
Organising the Organisation 题目链接:https://vjudge.net/problem/UVA-10766 Description: I am the chief of ...
- SPOJ 104 HIGH - Highways
HIGH - Highways http://www.spoj.com/problems/HIGH/ In some countries building highways takes a lot o ...
随机推荐
- 曼孚科技:数据标注,AI背后的百亿市场
1. 两年前,来自山东农村的王磊成为了一位数据标注员.彼时的他,工作内容非常简单且枯燥:识别图片中人的性别. 然而,一段时间之后,他注意到分配给他的任务开始变得越来越复杂:从识别性别到年龄,从框选 ...
- eclipse中创建了web项目,src下创建子目录是平级的情况
1.在以下可设置不同的视图 windows->show view菜单 ->点Other...... 然后在搜索框里输入你想要的视图 2.在Project Explorer下创建的包看 ...
- UVa - 12050 Palindrome Numbers (二分)
Solve the equation: p ∗ e −x + q ∗ sin(x) + r ∗ cos(x) + s ∗ tan(x) + t ∗ x 2 + u = 0 where 0 ≤ x ≤ ...
- numpy学习(一)
(一)基础学习 学习渠道:阿里天池AI学习——Numpy基础(传送门) (二)练习篇 练习渠道:Numpy基础100题(Part 1) 1. Import the numpy package unde ...
- Linux - pip 安装使用说明
简介 pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法 方案一 wget https://bootstrap.pypa.io/get-pip.py ...
- 码云项目克隆至github
个人博客 地址:http://www.wenhaofan.com/article/20181104211917 因为我的博客项目一开始是存放在码云上面的,但是我又想在GitHub上有该项目的提交记录, ...
- 使用pip install mysqlclient命令安装mysqlclient失败?(基于Python)
我们使用Django.flask等来操作MySQL,实际上底层还是通过Python来操作的.因此我们想要用Django来操作MySQL,首先还是需要安装一个驱动程序.在Python3中,驱动程序有多种 ...
- win10中批量新建文件夹
1.新建一个bat文件,如[批量新建.bat].或者新建txt文件,输入完内容后重命名为bat文件 2.建议用notepad软件打开文件,首先确定编码格式为ANSI编码 (否则最后出现的效果是乱码,不 ...
- resample matlab实现
使用线性插值实现sample rate转换. function output = simpleResample(input, inputfs, outputfs) inputLen = length( ...
- ADO.NET中sqlserver和mysql的变量名
因为ADO.NET标配是访问SQL SERVER数据库,那么如果需要访问MySQL数据库,那么ADO.NET五个对象也必须转换. 访问 SQL SERVER 的ADO.NET对象 1.SqlConne ...