zoukankan      html  css  js  c++  java
  • SPOJ104 Highways,跨越数

    高速公路(SPOJ104 Highways)

           一个有n座城市的组成国家,城市1至n编号,当中一些城市之间能够修建快速公路。如今,须要有选择的修建一些快速公路。从而组成一个交通网络。你的任务是计算有多少种方案,使得随意两座城市之间恰好仅仅有一条路径?

           数据规模:1≤n≤12。

     

    生成树计数

    算法步骤:

    1、 构建拉普拉斯矩阵

         Matrix[i][j] =

    degree(i) , i==j

              -1,i-j有边

               0,其它情况

    2、 去掉第r行,第r列(r随意)

    3、 计算矩阵的行列式

    #include <map>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    const int maxn = 105;
    const int maxm = 100005;
    const int INF = 1e9;
    int degree[maxn];
    ll g[maxn][maxn];
    int n, m;
    
    ll det(ll a[][maxn], int n)
    {
        ll ret = 1;
        for(int i=1; i<n; ++i){
            for(int j=i+1; j<n; ++j){
                while(a[j][i]){
                    ll t = a[i][i]/a[j][i];
                    for(int k=i; k<n; ++k){
                        a[i][k] = (a[i][k]-a[j][k]*t);
                    }
                    for(int k=i; k<n; ++k){
                        swap(a[i][k], a[j][k]);
                    }
                    ret = -ret;
                }
            }
            if(a[i][i]==0){
                return 0;
            }
            ret = ret*a[i][i];
        }
        if(ret<0){
            ret = -ret;
        }
        return ret;
    }
    
    void solve()
    {
        int u, v;
        memset(degree, 0, sizeof degree );
        memset(g, 0, sizeof g );
        scanf("%d%d", &n, &m);
        while(m--){
            scanf("%d%d", &u, &v);
            u--,v--;
            g[u][v] = g[v][u] = -1;
            degree[u]++;
            degree[v]++;
        }
        for(int i=0; i<n; ++i){
            g[i][i] = degree[i];
        }
        printf("%lld
    ", det(g, n));
    }
    
    int main()
    {
        int t;
        scanf("%d", &t);
        while(t--){
            solve();
        }
        return 0;
    }
    


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    基于socket.io的实时消息推送
    mysql_use_result & mysql_store_result & MYSQLI_ASYNC
    深入浅出讲解:php的socket通信
    Mysql时间存储类型优缺点?DATETIME?TIMESTAMP?INT?
    PHP垃圾回收机制引用计数器概念
    php调试函数
    Docker生产环境实践指南
    11 个 Linux 上最佳的图形化 Git 客户端
    浅谈TCP/IP网络编程中socket的行为
    highcharts 使用实例
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4825523.html
Copyright © 2011-2022 走看看