生成树计数——SPOJ HIGH

本文关键字:生成  原图  矩阵  过程  证明  具体 


  • 题目链接:

  • 题意:给出一个无向图(权值为1),求有多少个生成树

  • 分析:这个祭出Matrix-Tree来,对于原图的联通矩阵,计算其Kirchhoff矩阵,然后求出其n-1大小的子矩阵的行列式,就是原图生成树的个数了。具体证明过程请看07年国家集训队论文

  • AC代码:

/*************************************************************************
    > File Name: test.cpp
    > Author: Akira 
    > Mail: qaq.febr2.qaq@gmail.com 
 ************************************************************************/

#include<bits/stdc++.h>
typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
#define MST(a,b) memset(a,b,sizeof(a))
#define CLR(a) MST(a,0)
#define Sqr(a) ((a)*(a))
using namespace std;

#define MaxN 15
#define MaxM MaxN*MaxN
#define INF 0x3f3f3f3f
#define PI 3.1415926535897932384626
const int mod = 1E9+7;
const double eps = 1e-6;
#define bug cout<<88888888<<endl;
#define debug(x) cout << #x" = " << x << endl;

struct Matrix  
{  
    LL a[MaxN][MaxN];   
    LL* operator[](int x)  
    {  
        return a[x];  
    }  
    LL det(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 tmp = a[i][i] / a[j][i];  
                    for(int k = i; k < n; k++) a[i][k] = (a[i][k] - a[j][k]*tmp) ;  
                    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] ;  
        }  
        return ret;  
    }  
}; 

int n,m;
int main()
{
    //std::ios::sync_with_stdio(false);
    int T;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d", &n, &m);
        Matrix G,ans;
        CLR(ans.a);
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                G.a[i][j] = (i==j);
        int u,v;
        while(m--) 
        {
            scanf("%d%d", &u, &v);
            u--,v--;
            G.a[u][v] = G.a[v][u] = 1;
        }
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            {
                if(i!=j && G.a[i][j])
                {
                    ans.a[i][i]++;
                    ans.a[i][j] = -1;
                }
            }
        printf("%lld\n", abs(ans.det(n)) );
    }
    //system("pause");
}


扩展:

唐诗生成器

使用唐诗语料库,经过去噪预处理、分词、生成搭配、生成主题等过程,生成唐诗。csdn下载地址:http://download.csdn.net/detail/lijiancheng0614/9840952 github上repository地址:https://github.com/lijiancheng0614/poem_generator环境Python 2.7Flaskjieba运行方法如果是第一次运行,则需要安装相关的库及生成初始数据:pip install flaskpip instal......

win10 UWP Hmac

HMAC是密钥相关的哈希运算消息认证码,输入密钥和信息。 在uwp,Hmac在很多网络使用,我最近写qiniu SDK,把原来C#改为UWP,需要使用HMAC。上传文件<form method="post" action="http://upload.qiniu.com/" enctype="multipart/form-data"> <input name="key" type="hidden" value="<resource_key>"> <i......

JSON最佳实践

JSON最佳实践JSON是一种文本方式展示结构化数据的方式,从产生的时候开始就由于其简单好用、跨平台,特别适合HTTP下数据的传输(例如现在很流行的REST)而被广泛使用。by kimmking@163.com1、JSON是什么JSON起源于1999年的JS语言规范ECMA262的一个子集(即15.12章节描述了格式与解析),后来2003年作为一个数据格式ECMA404(很囧的序号有不有?)发布。 2006年,作为rfc4627发布,这时规范增加到18页,去掉没用的部分,十页不到。JSON的应用......

API拦截教程

对于程序员来讲,API拦截技术是一种重要的基础技术。这项技能为编写某些工具软件提供了可能,并可以大大提高我们对第三方应用程序的控制能力。不过,目前 API 拦截的技术资料往往局限于原理方面的论述,很少有文章涉及到如何具体地编译一个 API 拦截程序。我在寻找相关资料的时候,就走了不少弯路,如果当初有一份详细的资料,这些不必要的弯路是完全可以避免的。而这正是我编写这份技术资料的目的。要学习 API 拦截技术,您需要以下知识:  C/C++ 相关知识 VC 编译器的使用方法。......

PHP安装、配置及拓展总结

PHP安装、配置及拓展总结:本篇文章主要总结的是PHP的安装、配置、拓展库的添加及验证,实现平台为Unix/Linux/Mac OS X,这里也包括日后的技术文章,只将PHP语言作为服务器端脚本和命令式脚本的使用进行总结,其中不涉及对桌面应用程序的处理。 ·     如何安装·     如何配置·     如何拓展·  ......

支付宝APP支付-php后台生成请求参数

支付宝APP支付本文将介绍新版支付宝app支付的php后台(php框架是tp5):下载官方文档配置商家支付宝商家参数构造业务请求参数*配置公共参数生成签名生成最终的请求字符串生成最终的请求字符串下载官方文档 官方文档: https://doc.open.alipay.com/docs/doc.htm?treeId=204&articleId=105051&docType=1 sdk下载: https://doc.open.alipay.com/doc......

ASP.Net 4.0 --- 数据访问(三)

数据访问ADO.Net访问      ASP.NET提供了ADO.NET技术,它是ASP.NET应用程序与数据库进行交互的一种技术。ADO.NET提供了对关系数据、XML和应用程序数据的访问,是.NET Framework 不可缺少的一部分。ADO.NET支持多种开发需求,把对数据库的操作分着几个步骤,并为每个步骤提供对象来封装操作过程,从而使对数据库的操作变得简单易行。      &n......

ASP.Net 4.0 --- 基本对象(二)

ASP.Net 基本对象      Asp.Net是一个庞大的软件体系,它提供了大量的对象类库,这些类库包含了许多封装好的内置对象,开发人员可以直接使用这些对象的方法和属性,只需较少的代码量就可以完成很多的功能。 Page类、Request类、Response类、Server对象主要用来链连接服务器和客户端浏览器之间的联系。 Cookie对象、Session对象、Application对象主要用于网站状态管理。Page类 &n......

安装OpenJDK1.8

CentOs 7安装jresudo yum install java-1.8.0-openjdk此时,执行java -versionopenjdk version "1.8.0_111"OpenJDK Runtime Environment (build 1.8.0_111-b15)OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)执行javac -version,显示没有此命令安装java开发工具sudo yum ......

PHP扩展Imagick方法说明

//创建一个Imagick对象,$srcPath是图片路径$im = new Imagick($srcPath);方法:$im->setImageFormat('jpeg')说明:设置图片格式为JPEG,如果想设置为其它格式,修改参数即可,例如PNG的为:$im->setImageFormat('png')方法:$im->stripImage()说明:去除图片中的多余信息,例如exif、地理位置信息等方法:$im->getImageWidth(......

“第一次亲密接触”——BBS论坛设计SSH咋整合

“如果我还有一天寿命,那天我要做你女友。  我还有一天的命吗?没有。   所以,很可惜。我今生仍然不是你女友。   如果我有翅膀,我要从天堂飞下来看你。   我有翅膀吗?没有。   所以,很遗憾。我从此无法再看到你。   如果把整个浴缸的水倒出,也浇不熄我对你爱情的火焰。   整个浴缸的水全部倒得出吗?可以。   所以,是的。我爱你。”      这次活动的标题让我想起在初中看的一部痞子蔡的网络小说-《第一次的亲密接触》,那时侯网络还没有那么普及......

Tinify API批处理压缩PNG和JPG(Java版本)

因为工作的需要,所以用Tinify的Java API写了一个批处理小程序,主要是用来自动压缩UI和美术工具生成的新图片。在这里就分享出来,如果只是单纯的开发,其实真的是很简单,官方给的教程就很清晰了。稍微麻烦点的是搭建java的运行环境什么的以及下载相关的依赖包,可能会遇到一些问题。 这里只简单的说一下过程就贴代码了。想先了解的,可以先看我之前翻译的官方 api文档:Tinify Java API中文参考文档我是采用源码直接编译的,直接在Github上把Tinify Java的源代码给下载下来 ......

PHP调试跟踪之XDebug使用总结

PHP调试跟踪之XDebug使用总结:Xdebug是一个开源的PHP程序调试工具,可以使用它来调试、跟踪及分析程序运行状态。当然,Xdebug需要结合PHP的编辑工具来打断点、跟踪、调试及分析,比较常用的PHP的Xdebug调试环境:Vim +Xdebug。 ·     安装配置·     调试环境·     跟踪分析· ......

我的2016---回味大学生活,展望IT职场

毕业了近一年多了,现在终于可以自己能够养活自己了,总算这一年没有向家里要生活费了,中国的大学生,大学毕业都20多岁了。最少都上了14年的学。子曰:“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。“其实我真正意义上看书也就是在高中毕业到学学毕业这段时间,其他的时间都是些应试。在高中毕业之后读了各个专业相关的书籍计算机之类的《皇帝新脑》,工业相关《第二次工业革命》,生物类《心灵裸舞》,物理《果壳宇宙》,化学《元素周期律》,人物传记之类的。貌似......

Stay Hungry-我的2016

学习先介绍一下自己,本人在成都某985读研,研二在读。从一所普通本科考到985学校,环境变化很大。本校的学生确实基础要好得多,但是我相信这些都是可以用努力去弥补的。研一下,我就进了教研室,一开始干点杂事,正式进入研二后,就参与到教研室的一个示波表项目。主要负责软件方面,算是嵌入式软件。在这里要感谢带我的导师,手把手的教我。因为本科的时候做过飞思卡尔,写一些小代码对我来说不是什么难事,从实现功能的角度上来说都是比较成功的。但是我的老师告诉我写代码要有整体的思维,比如资源如何分配,整体架构直接影响代......

PHP扩展redis使用手册

【key】方法:EXISTS($key)说明:检查某个key是否存在,存在返回true,不存在返回false方法:DEL($key)说明:删除一个key,返回删除的个数(整形)方法:EXPIRE($key, $seconds);说明:为某个key设置生存时间,单位为秒,设置成功返回true,失败返回false,比如key不存在的时候【string】方法:SET($key, $value)说明:设置一个string,设置成功返回true,key不存在会自动创建对应的key,key存在则覆盖它的旧&......

[AHK]为excel生成sheet目录

工作中遇到excel有n多sheet,而excel的sheet浏览条比较短,能显示的sheet页面数目有限,不方便使用。【需求】在首页中生成目录,每个目录项对应一个sheet,点击可以跳转:在每个sheet中有返回首页的超链接:函数参数说明:内部跳转需要用SubAddress,外部跳转则用AddressHyperlinks.Add(Anchor, Address, SubAddress, ScreenTip, TextToDisplay)遇到sheet名中......

Chrome 强奸了我的 FTP Http Https 协议

今天突然需要把 FTP 转到 IE 下,却发现无论怎样修改,都不能让 FTP 协议变回到 IE没办法,只能删除 Chrome ,但是删除后,问题依然在运行处输入 ftp://xx 提示找不到应用程序我晕啊,什么时候 Chrome 也是流氓了?!!!我这里ftp可以随意改变。http和https直接改不行,修改注册表键值就可以,它的确是和文件格式关联的。因为它的描述里面说的很清楚了:chrome Html doucument,而不是protocol,现在对于http的关联这种方法很普遍。也就是说c......

SQL里IN的用法以及优化

 1.in后条件不多,可以考虑主表建索引,或用union all 代替  2. in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外......

SQL语句中IN的用法

具体的逻辑是:文件分不同的DocTypeID即文件的类型 如果对文件进行处理比如说 银行等部门对单据先要进行扫描然后录入 校对等处理,那么就要分为不同的批次即不同的BatchNum 在这BatchNum 还可能有多个JobNum     而在每个JobNum 里存放着文件,有时文件分多页 也就是PageNum       而进行到最后是将这些单据存到数据库中,只能一页......