• spoj high


    matrixtree定理裸体,学了行列式的n^3解法,(应该是能应用于所有行列式);

    代码是参考某篇题解的。。。

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    int ss,x,y,T,n,m,du[15];
    ll g[15][15];
    double ans,c[15][15],d[15][15];
    bool zero(double x){return (x>0?x:-x)<1e-15;}
    double guass(){
        int i,j,k;
        ss=0;ans=1;
        for(i=1;i<n;++i)
         for(j=1;j<n;++j)d[i][j]=c[i][j];
        for(i=1;i<n;++i){
            if(zero(d[i][i])){
                for(j=i+1;j<n;++j)
                if(!zero(d[j][i]))break;
                if(j==n)return 0;
                for(k=i;k<n;++k)swap(d[i][k],d[j][k]);
                ss++;
            }
            ans*=d[i][i];
            for(int k=i+1;k<n;++k)d[i][k]/=d[i][i];
            for(int j=i+1;j<n;++j)
              for(int k=i+1;k<n;++k)
               d[j][k]-=d[j][i]*d[i][k];
        }
        return abs(ans);
    }
    int main(){
        cin>>T;
        while(T--){
            memset(g,0,sizeof(g));
            memset(c,0,sizeof(c));
            memset(du,0,sizeof(du));
            cin>>n>>m;
            for(int i=1;i<=m;++i){
                scanf("%d%d",&x,&y);
                g[x][y]=g[y][x]=1;
                du[x]++;du[y]++;
            }
            for(int i=1;i<=n;++i)c[i][i]=du[i];
            for(int i=1;i<n;++i)
              for(int j=1;j<n;++j){
                c[i][j]=c[i][j]-g[i][j];
            }
            printf("%0.0lf
    ",guass());
        }
        system("pause");
        return 0;
    }
  • 相关阅读:
    关于Python的super用法研究
    服务器提示缺少JAVA_HOME
    python_popen
    nslookup
    day2--深copy和浅copy
    if/while/fore根据编号购买商品
    标志位的用法
    python 循环和file操作实现用户密码输错三次将用户锁定
    day01项目:用户三次登陆锁定
    day01——python从认识开始
  • 原文地址:https://www.cnblogs.com/dibaotianxing/p/8034691.html
Copyright © 2020-2023  润新知