Matrix-tree定理,给出一个无向图,问求出的生成树方案有多少种方案,利用Matrix-tree定理,主对角线第i行是i的度数,(i,j) 值为i和j之间边的数量,然后删去第一行第一列,利用初等变换求出行列式的绝对值就是答案。

附上代码——by VANE

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll c[][],tmp[];
int main()
{
int T,m,u,v;
ll t,ans;
scanf("%d",&T);
while(T--)
{
memset(c,,sizeof c);
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&u,&v);
u--;v--;
c[u][v]--;c[v][u]--;
c[u][u]++;c[v][v]++;
}
ans=;
for(int i=;i<n;++i)
{
for(int j=i+;j<n;++j)
while(c[j][i])
{
t=c[i][i]/c[j][i];
for(int k=i;k<n;++k) c[i][k]-=c[j][k]*t;
for(int k=i;k<n;++k) swap(c[i][k],c[j][k]);
ans=-ans;
}
ans*=c[i][i];
if(!ans) break;
}
ans=max(ans,-ans);
printf("%lld\n",ans);
}
}

UPD:对于有向图而言

1、无向图中是双向边,所以一条边(u,v)会使度数矩阵的(u;u)和(v;v)元都加一,现 在变成有向图,只让其中一个加一即可。

2、同理,邻接矩阵也从(u;v)元和(v;u)加一变成其中一个加一。

3、基尔霍夫矩阵还是度数减邻接。

4、无向图是任意删去一行一列,有向图中是删除“根节点”所在行列求 行列式。

最新文章

  1. [Linux]I/O多路复用和epoll
  2. svn清除已保存的用户名和密码
  3. 双层路由设置,WAN口和LAN口连接的方法设置
  4. C# Windows - TabControl
  5. Flash,EEPROM差别
  6. 为Android系统内置C可执行程序测试Linux内核驱动程序
  7. JAVA压缩图片 服务器端压缩图片 原创
  8. MyBatis小问题(1)-Mapper中错误No constructor found...
  9. 如何解决Angular网页内嵌推特时间线无法正常显示
  10. js 边写边出现刚写的内容
  11. LeetCode 总结
  12. [LeetCode] 345. Reverse Vowels of a String_Easy tag:Two Pointers
  13. MS08_067漏洞测试——20145301
  14. 在linux中,如何增加、修改、删除、暂停和冻结用户名
  15. 使用servicestack连接redis
  16. Delphi XE7中开发安卓程序一些有用的帮助资源
  17. Sybase常用时间日期函数
  18. shell习题第4题:监控ip地址存活
  19. IAR新建MSP430工程
  20. String类的一些常规方法

热门文章

  1. from 表单多文本提交不为空
  2. 【洛谷P2014】选课
  3. 2017ACM暑期多校联合训练 - Team 7 1002 HDU 6121 Build a tree (深搜+思维)
  4. linux 在命令行中通过conda使用anaconda
  5. ValueList用法
  6. 导航狗IT周报第十五期(July 8, 2018)
  7. python基础===用9种方式生成新的对象
  8. sql server 2008 r2 产品密钥
  9. spring mvc 自定义编辑器
  10. java基础14 多态(及关键字:instanceof)