Ural 1627 Join(生成树计数)

http://acm.timus.ru/problem.aspx?space=1&num=1627

  生成树计数的题,直接用Matrix-Tree定理就可以解决问题了。

代码如下:

View Code
  1 #include <cstdio>
  2 #include <cstring>
  3 #include <algorithm>
  4 
  5 using namespace std;
  6 
  7 const int maxSize = 100;
  8 const int initMod = 1e9;
  9 typedef long long ll;
 10 int curSize = maxSize;
 11 
 12 struct Mat {
 13     ll val[maxSize][maxSize];
 14 
 15     Mat (ll one = 0) {
 16         for (int i = 0; i < curSize; i++) {
 17             for (int j = 0; j < curSize; j++) {
 18                 val[i][j] = 0;
 19             }
 20             val[i][i] = one;
 21         }
 22     }
 23 
 24     void print() {
 25         for (int i = 0; i < curSize; i++) {
 26             for (int j = 0; j < curSize; j++) {
 27                 printf("%lld ", val[i][j]);
 28             }
 29             puts("");
 30         }
 31         puts("~~~");
 32     }
 33 } mat;
 34 
 35 const int maxn = 12;
 36 char mp[maxn][maxn];
 37 
 38 void convert(int l, int r) {
 39     int mark = 0;
 40 
 41     for (int i = 0; i < l; i++) {
 42         for (int j = 0; j < r; j++) {
 43             mp[i][j] = (mp[i][j] == '.') ? ++mark : 0;
 44         }
 45     }
 46 //    printf("mark %d\n", mark);
 47 
 48     curSize = mark + 1;
 49     mat = Mat();
 50 
 51     for (int i = 0; i < l; i++) {
 52         for (int j = 0; j < r; j++) {
 53             if (!mp[i][j]) continue;
 54             if (i && mp[i - 1][j]) {
 55                 mat.val[mp[i][j]][mp[i - 1][j]]--;
 56                 mat.val[mp[i][j]][mp[i][j]]++;
 57             }
 58             if (j && mp[i][j - 1]) {
 59                 mat.val[mp[i][j]][mp[i][j - 1]]--;
 60                 mat.val[mp[i][j]][mp[i][j]]++;
 61             }
 62             if (i != l - 1 && mp[i + 1][j]) {
 63                 mat.val[mp[i][j]][mp[i + 1][j]]--;
 64                 mat.val[mp[i][j]][mp[i][j]]++;
 65             }
 66             if (j != r - 1 && mp[i][j + 1]) {
 67                 mat.val[mp[i][j]][mp[i][j + 1]]--;
 68                 mat.val[mp[i][j]][mp[i][j]]++;
 69             }
 70         }
 71     }
 72 //    puts("~~~");
 73 //    mat.print();
 74 }
 75 
 76 ll gcd(ll a, ll b) {
 77     return b ? gcd(b, a % b) : a;
 78 }
 79 
 80 ll lcm(ll a, ll b) {
 81     return a / gcd(a, b) * b;
 82 }
 83 
 84 ll cal() {
 85     ll ret = 1ll;
 86 
 87     curSize--;
 88     for (int p = 1, i, j; p < curSize; p++) {
 89         for (i = p + 1; i < curSize; i++) {
 90             while (mat.val[i][p]) {
 91                 int tmp = mat.val[p][p] / mat.val[i][p];
 92 
 93                 for (j = p; j < curSize; j++) {
 94                     mat.val[p][j] = ((mat.val[p][j] - mat.val[i][j] * tmp) % initMod + initMod) % initMod;
 95                     swap(mat.val[i][j], mat.val[p][j]);
 96                 }
 97                 ret = -ret;
 98             }
 99         }
100         ret *= mat.val[p][p];
101         ret = (ret % initMod + initMod) % initMod;
102 //        mat.print();
103     }
104 
105     return ret;
106 }
107 
108 int main() {
109 //    freopen("in", "r", stdin);
110 //    freopen("out", "w", stdout);
111     int n, m;
112 
113     while (~scanf("%d%d", &n, &m)) {
114         for (int i = 0; i < n; i++) {
115             scanf("%s", mp[i]);
116         }
117         convert(n, m);
118         printf("%lld\n", cal());
119     }
120 
121     return 0;
122 }

 

——written by Lyon

转载于:https://www.cnblogs.com/LyonLys/archive/2012/10/29/Ural_1627_Lyon.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Navicat for MySQL工具创建mysql数据库定时器

步骤1&#xff1a; 步骤二&#xff1a; 效果图:

魔兽争霸3地图(WarIII Maps):三国猛兽传

魔兽争霸3地图&#xff08;WarIII Maps&#xff09;&#xff1a;三国猛兽传三国猛兽传三国时期&#xff0c;连年战乱&#xff0c;天降异象&#xff0c;所有战力无双的英雄&#xff0c;外表全都变成了凶悍的猛兽…………其貌虽毁&#xff0c;其心不改攻城略地&#xff0c;百战成…

Oracle SQL语句执行步骤

Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1、当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法、表名、字段名等相关信息&#xff08;如下图&#xff09;&#xff0c;这过程会花比较长的时间&#xff0c;因为它要分…

Ubuntu 找不到libc.so.6

2019独角兽企业重金招聘Python工程师标准>>> 在Ubuntu 上&#xff0c;其实这个库是存在的&#xff0c;只是地方换了&#xff0c;在"/lib/i386-linux-gnu/"下面&#xff0c;我们只需创建一个链接即可。使用下面的命令&#xff1a; rootubuntuJack:/lib/i3…

matlab学习:人脸识别之LBP (Local Binary Pattern)

1.算法简介 LBP是一种简单&#xff0c;有效的纹理分类的特征提取算法。LBP算子是由Ojala等人于1996年提出的&#xff0c;主要的论文是"Multiresolution gray-scale and rotation invariant texture classification with local binary patterns", pami, vol 24, no.7,…

大流量 网站

引用&#xff1a;http://www.admin10000.com/document/948.html 动态应用&#xff0c;是相对于网站静态内容而言&#xff0c; 是指以c/c、php、Java、perl、.net等 服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通 常与数…

Portal-Basic Java Web 应用开发框架:应用篇(十一) —— 整合 Spring

Portal-Basic Java Web应用开发框架&#xff08;简称 Portal-Basic&#xff09;是一套功能完备的高性能Full-Stack Web应用开发框架&#xff0c;内置稳定高效的MVC基础架构和DAO框架&#xff08;已内置Hibernate、MyBatis和JDBC支持&#xff09;&#xff0c;集成 Action拦截、F…

Windows 8实用窍门系列:9.Windows 8中使用FlipView

FlipView控件类似于翻页控件&#xff0c;并且是现成的翻页按钮&#xff0c;你只需要为其增加数据项即可。本文讲述两种方式的FlipView项目和展示。 一&#xff1a;直接前台FlipViewItem <FlipView><FlipViewItem><Image Stretch"Uniform" Source"…

推荐系统相关资源汇总

2019独角兽企业重金招聘Python工程师标准>>> 为了更好的学习推荐系统&#xff0c;本博文将个人知道的关于推荐系统的相关资源整理汇总&#xff0c;拿出来与大家分享。本博文每月更新一次&#xff0c;长期维护&#xff0c;如果你有好的关于推荐系统的资源&#xff0c…

tcp工作原理

TCP 三次握手建立连接 TCP 建立连接全过程解释 客户端发送 SYN 给服务器&#xff0c;说明客户端请求建立连接&#xff1b;服务端收到客户端发的 SYN&#xff0c;并回复 SYNACK 给客户端&#xff08;同意建立连接&#xff09;&#xff1b;客户端收到服务端的 SYNACK 后&#xf…

物联网碰到云计算会怎么样?

如果提起物联网和云计算&#xff0c;熟悉安防行业的朋友们可能都不会太过陌生。没错&#xff0c;就是这两项新生技术的问世&#xff0c;给我们安防行业带来了许多全新的理念。而在不少人的眼中&#xff0c;物联网和云计算在潜意识中也是有不少联系的&#xff0c;但是如果要细细…

CentOS FTP安装及配置

CentOS FTP安装及配置 LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd.访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式: (1)anonymous(…

【FPGA】Verilog 实践:优先级编码器 | Priority encoder

0x00 优先级编码器&#xff08;Priority encoder&#xff09; "能将多个二进制输入压缩成更少数目输出的电路或算法的编码器" 优先级编码器是一种编码器&#xff0c;它考虑了两个或更多输入位同时变为 1 但没有收到输入的情况。当输入进来时&#xff0c;优先级编码…

linux系统用户迁移

今天登陆上来发现好久都没有写博客了。 刚刚做了一个linux用户迁移&#xff0c;记录下&#xff0c;以后用到的话&#xff0c;查起来方便。希望对大家有帮助。 环境&#xff1a;我们原先的一台服务器由于过保所以替换新的服务器&#xff0c;但是由于用户数较多&#xff0c;如果一…

vm虚拟远程部署windows驱动

注意打印机是用com1端口&#xff0c;应该提前删除 bcdedit /debug on bcdedit /dbgsettings serial debugport:1 baudrate:115200 bcdedit /dbgsettings 以下两条是配置调式环境系统用 bcdedit /set testsigning on bcdedit /set loadoptions DDISABLE_INTEGRITY_CHECKS 在…

Android:SharedPreferences详解+示例

为什么80%的码农都做不了架构师&#xff1f;>>> 一、简介SharedPreferences是一种轻型的数据存储方式&#xff0c;它的本质是基于XML文件存储key-value键值对数据&#xff0c;通常用来存储一些简单的配置信息。 二、存储位置 在/data/data/<包名>/shared_pre…

类模板的分离式编译错误解决

声明&#xff1a;不谈逻辑是否能被执行成功&#xff0c;就谈编译是否成功. vs的错误: linux下g的错误: 以上错误&#xff0c;改怎么解决呢&#xff1f; 方法1&#xff1a;把实现代码和头文件写在一起 方法2&#xff1a;在.cpp文件中加入模板声明

6421B Lab5 路由和远程访问的配置与故障排除

共2个实验&#xff1a; 实验L5A&#xff1a;配置和管理网络访问 实验L5B&#xff1a;实现DirectAccess&#xff08;略&#xff09; 实验L5A&#xff1a;配置和管理网络访问 共有3个练习 练习1&#xff1a;实现***远程访问解决方案。 练习2&#xff1a;配置一个自定义的网络策略…

工作中影响提高的一些想法

2019独角兽企业重金招聘Python工程师标准>>> 最近&#xff0c;一直很迷茫&#xff0c;老是觉得效率低下&#xff0c;慢慢发现是自己做事的方式有问题&#xff0c;首先觉得人懒&#xff0c;喜欢动手却不愿意去想&#xff0c;觉得慢慢做过去&#xff0c;问题就解决了&…

项目:SQL server 2008构建群集——环境部署

网络拓扑图 windows 2008 (1)操作系统&#xff1a;Microsoft Windows Server 2008 R2 (64)SQL版本 &#xff1a;SQL server 2008 R2 64 位角色: 故障转移群集节点 SQL server 故障转移群集安装域名&#xff1a;test.com主机名&#xff1a;PC1IP: 172.16.0.1 &#xff08;…