• SPOJ 104 HIGH


    题目链接:https://vjudge.net/problem/SPOJ-HIGH

    解法:

    生成树计数

    1、构造 基尔霍夫矩阵(又叫拉普拉斯矩阵)

         n阶矩阵 

         若u、v之间有边相连 C[u][v]=C[v][u]=-1

         矩阵对角线为点的度数

    2、求n-1阶主子式 的行列式的绝对值

         去掉第一行第一列 

      初等变换消成上三角矩阵

         对角线乘积为行列式

    #include <bits/stdc++.h>
    using namespace std;
    const double eps = 1e-8;
    const int maxn = 110;
    int sgn(double x){
        if(fabs(x)<eps) return 0;
        if(x<0) return -1;
        else return 1;
    }
    double b[maxn][maxn];
    double det(double a[][maxn], int n){
        int i,j,k,sign=0;
        double ret=1;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                b[i][j]=a[i][j];
        for(i=0; i<n; i++){
            if(sgn(b[i][i])==0){
                for(j=i+1; j<n; j++)
                    if(sgn(b[j][i])!=0)
                        break;
                if(j==n) return 0;
                for(k=i; k<n; k++){
                    swap(b[i][k], b[j][k]);
                }
                sign++;
            }
            ret *= b[i][i];
            for(k=i+1; k<n; k++)
                b[i][k]/=b[i][i];
            for(j=i+1;j<n;j++)
                for(k=i+1;k<n;k++)
                    b[j][k]-=b[j][i]*b[i][k];
        }
        if(sign&1) ret=-ret;
        return ret;
    }
    double a[maxn][maxn];
    int g[maxn][maxn];
    
    int main()
    {
        int T,n,m,u,v;
        scanf("%d", &T);
        while(T--){
            scanf("%d%d", &n,&m);
            memset(g, 0, sizeof(g));
            while(m--){
                scanf("%d %d", &u,&v);
                u--,v--;
                g[u][v]=g[v][u]=1;
            }
            memset(a,0,sizeof(a));
            for(int i=0; i<n; i++)
                for(int j=0; j<n; j++)
            if(i!=j&&g[i][j]){
                a[i][j]=-1;
                a[i][i]++;
            }
            double ans = det(a,n-1);
            printf("%.0f
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    Java主流日志工具库
    JSON 与 String、Map、JavaBean互转
    Session超时处理
    spring cron表达式(定时器)
    Windows服务器下用IIS Rewrite组件为IIS设置伪静态方法
    JAVA导出Excel(支持多sheet)
    自己实现一个简单的线程池
    数据库
    计算机网络
    HashMap源码分析
  • 原文地址:https://www.cnblogs.com/spfa/p/7481312.html
Copyright © 2020-2023  润新知