zoukankan      html  css  js  c++  java
  • SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

    【题目分析】

        Matrix-Tree定理+高斯消元

        求矩阵行列式的值,就可以得到生成树的个数。

        至于证明,可以去看Vflea King(炸树狂魔)的博客

    【代码】

    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    #define eps 1e-8
    #define maxn 15
    double C[maxn][maxn],G[maxn][maxn],A[maxn][maxn];
    int tt,n,m,a,b;
    
    void Gauss()
    {
    	double ret=1;
    	for (int i=1;i<n;++i)
    	{
    		for (int j=i+1;j<n;++j)
    			while (fabs(C[j][i])>eps)
    			{
    				double t=C[i][i]/C[j][i];
    				for (int k=i;k<n;++k)
    					C[i][k]-=t*C[j][k];
    				for (int k=i;k<n;++k)
    					swap(C[i][k],C[j][k]);
    				ret*=-1;
    			}
    		ret=ret*C[i][i];
    	}
    	printf("%.0f
    ",ret);
    }
    
    int main()
    {
    	scanf("%d",&tt);
    	while (tt--)
    	{
    		memset(G,0,sizeof G);
    		memset(A,0,sizeof A);
    		memset(C,0,sizeof C);
    		scanf("%d%d",&n,&m);
    		for (int i=1;i<=m;++i)
    		{
    			int a,b;
    			scanf("%d%d",&a,&b);
    			G[a][a]+=1;
    			G[b][b]+=1;
    			A[a][b]=A[b][a]=1;
    		}
    		for (int i=1;i<=n;++i)
    			for (int j=1;j<=n;++j)
    				C[i][j]=G[i][j]-A[i][j];
    		Gauss();
    	}
    }
    

      

  • 相关阅读:
    微信小程序非域名测试环境,手机预览不正常,模拟器和真机调试正常解决办法
    vue 建项目及初步开发遇到的问题
    开发&测试
    架构&项目
    运维
    读书&源码
    ArrayList
    jdk集合知识点整理
    jdk集合关系图
    jvm知识点整理
  • 原文地址:https://www.cnblogs.com/SfailSth/p/6195170.html
Copyright © 2011-2022 走看看