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\n", det(g, n));
}

int main()
{
    int t;
    scanf("%d", &t);
    while(t--){
        solve();
    }
    return 0;
}

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

时间: 2024-10-13 10:39:26

SPOJ104 Highways,跨越数的相关文章

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 <m

SPOJ104. Highways

104. Highways Problem code: HIGH In some countries building highways takes a lot of time... Maybe that's because there are many possiblities to construct a network of highways and engineers can't make up their minds which one to choose. Suppose we ha

[spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)

In some countries building highways takes a lot of time... Maybe that's because there are many possiblities to construct a network of highways and engineers can't make up their minds which one to choose. Suppose we have a list of cities that can be c

转载-----nodejs内存定位

追踪NodeJS代码中的内存泄漏一直是一个很有挑战的难题.本文讨论如何从一个node写的应用里自动的跟踪到内存泄漏问题,在这里笔者向大家推荐两款追查内存问题的神器 —— memwatch 和 heapdump 首先,我们来看一个简单的内存泄漏 var http = require('http'); var server = http.createServer(function (req, res) { for (var i=0; i<1000; i++) { server.on('request

ETL流程概述及常用实现方法

http://blog.csdn.net/btkuangxp/article/details/48224187 目录(?)[-] 1抽取作业 1手工开发抽取作业时候的常用方法 11当数据源和DW为同一类数据库时 12当数据源和ODS为不同类型数据库时 2更新数据的时间和数量的问题 21实时抽取数据 22批量抽取数据 221常用实现 222根据下载时候对数据的筛选方式可以分为 2转换作业 1数据清洗 2数据转换 3加载作业 4流程控制 5常用商业ETL工具 ETL是英文Extract-Transf

1.SCOM来点料先

1.SCOM是何物? 先来点稍正式的描述: System Center Operations Manager是针对企业IT环境而提供端到端服务监控所需的一个软件解决方案. System Center Operations Manager提供了一个易于使用的监控环境,它可以跨越数百个操作系统和应用程序,来监控数以千计的事件和性能监测器,并为组织中IT环境提供单一的健康视图.服务健康视图是快速灵活地响应那些有可能影响业务正常运转,并最终可能导致企业花费金钱的事件的关键所在.(PS:根据微软官方的说明

python语句和语法

python语句和语法 python程序结构: 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. python的语法实质上是有语句和表达式组成的.表达式处理对象并嵌套在语句中.语句还是对象生成的地方(例如,赋值语句中的表达式),有些语句会完全生成新的对象类型(函数.类等).语句总是存在于模块中,而模块本身则又是由语句来管理的. python语句: 语句 角色 例子 赋值 创建引用值 a,b,c = 'good','bad','ugly' 调用 执行函数

威尔士柯基犬,计算机视觉,以及深度学习的力量

编者按:在上一篇博文中,我们介绍了Adam项目的效果及未来应用:用计算机视觉智能地识别物体.现在让我们走近这项技术,看大规模分布式系统如何有效地训练巨型深度神经网络(DNN),让这一切成为可能. 文章译自:http://research.microsoft.com/en-us/news/features/dnnvision-071414.aspx (有删减) 你能说出两种威尔士柯基犬之间的区别吗?倘若作为爱狗之人,你大概能够回答上来这个问题.但对于大多数人而言,这就有点困难了.因为他们可能根本不

C# @符号的作用, 可定义关键字为变量名

一 字符串中的用法字符@表示,其后的字符串是个“逐字字符串”(verbatim string).@只能对字符串常量作用.1.用于文件路径以下是引用片段:string s_FilePath ="C:\\Program Files\\Microsoft.NET\\test.txt";相当于以下是引用片段:string s_FilePath [email protected]"C:\Program Files\Microsoft.NET\test.txt"; 2.用@表示