https://vjudge.net/problem/SPOJ-HIGH

题意:

给n个点m条边,求生成树个数。

思路:

矩阵树裸题。

具体的话可以看一下周冬的论文《生成树的计数及其应用》。

简单说一下,$A[ ][ ]$为邻接矩阵,有边为1(其实也就是边的个数,有重边时要注意),无边为0。$D[ ][ ]$为度数矩阵,$i=j$时为1,否则为0。

$C[ ][ ]$为关联矩阵,$C[ ][ ]=D[ ][ ]-A[ ][ ]$。

最后解任意n-1阶的主子式即可。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,ll> pll;
const int INF = 0x3f3f3f3f;
const int maxn=+; int n,m;
double C[maxn][maxn];
int A[maxn][maxn],D[maxn][maxn]; double Gauss()
{
for(int k=; k<=n; k++) //k表示当前行数,因为行数与列数一样,所以这里k也代表了列数
{
int max_r=k;
for(int i=k+;i<=n;i++)
if(fabs(C[i][k])>fabs(C[max_r][k])) max_r=i;
if(C[max_r][k]==) return ; //有一列为0,行列式的值必为0
if(max_r!=k)
{
for(int j=k;j<=n;j++)
swap(C[k][j],C[max_r][j]);
}
for(int i=k+;i<=n;i++)
{
double tmp=C[i][k]/C[k][k];
for(int j=k;j<=n;j++)
C[i][j]-=tmp*C[k][j];
}
}
double ans=;
for(int i=;i<=n;i++) ans*=C[i][i]; //化为三角阵后计算主对角线元素乘积
ans=fabs(ans);
return ans;
} int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
memset(A,,sizeof(A));
memset(D,,sizeof(D));
scanf("%d%d",&n,&m);
for(int i=;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
D[u][u]++; D[v][v]++;
A[u][v]++; A[v][u]++;
}
n--;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
C[i][j]=D[i][j]-A[i][j];
printf("%.0lf\n",Gauss());
}
return ;
}

最新文章

  1. 杀死当前Excel进程
  2. PHP学习笔记二十三【This】
  3. Hibernate: merge方法
  4. 9.19.3 反射和Properties(重要)
  5. TypeScript学习笔记之类
  6. 面试题之(js实现当年剩余时间倒计时程序)
  7. 启动Weblogic问题集锦
  8. Delphi处理数据网格DBGrid的编辑框 获取还没有提交到数据集的字段文本
  9. Gym 102091L Largest Allowed Area 【二分+二维前缀和】
  10. poj 1679 判断MST是不是唯一的 (次小生成树)
  11. iOS web view 与 js 交互
  12. Git 重命名操作
  13. ios开发之--NSURL的用法
  14. spark Kryo serialization failed: Buffer overflow 错误
  15. Java线程池停止空闲线程是否有规则呢?
  16. python numpy logic_and
  17. python egg for centos 制作
  18. 第四周 实验一 Java开发环境的熟悉 报告
  19. JS设计模式——2.初识接口
  20. MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能

热门文章

  1. android加载gif图片
  2. jpress-配合nginx与tomcat安装
  3. Andrew Ng-ML-第八章-正则化
  4. Windows程序自启动方法汇总
  5. Postman + newman + jenkins 的API自动化测试应用
  6. .NET 互联网技术简介
  7. python 字符串的I/O 操作
  8. linux常用命令:tail 命令
  9. 如何发布Maven依赖到中央仓库
  10. CSS前叙