bzoj 4031: 小Z的房间 矩阵树定理

题目:

你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。

你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路。现在,你希望统计一共有多少种可行的方案。

n,m <= 9

题解:

矩阵树板子题.

刚学的矩阵树定理,练练手.

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
x=0;static char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
while(x=(x<<1)+(x<<3)+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
#define rg register int
#define rep(i,a,b) for(rg i=(a);i<=(b);++i)
#define per(i,a,b) for(rg i=(a);i>=(b);--i)
const int maxn = 128;
const int mod = 1e9;
char s[maxn][maxn];
int id[maxn][maxn],nodecnt;
int a[maxn][maxn];
inline int det(int n){
int ret = 1,s=0;
rep(i,1,n){
rg r = i;
for(r=i;r <= n;++r) if(a[r][i] != 0) break;
if(r == n+1) return 0;
if(r != i){
s ^= 1;
rep(j,i,n) swap(a[r][j],a[i][j]);
}
rep(j,i+1,n){
while(a[j][i]){
int x = a[j][i]/a[i][i];
rep(k,i,n){
a[j][k] -= 1LL*a[i][k]*x % mod;
if(a[j][k] < 0) a[j][k] += mod;
}
if(a[j][i] == 0) break;
s ^= 1;
rep(k,i,n) swap(a[j][k],a[i][k]);
}
}
ret = 1LL*ret*a[i][i] % mod;
}
if(s) ret = mod - ret;
return ret;
}
int main(){
int n,m;read(n);read(m);
rg u,v;
rep(i,1,n){
scanf("%s",s[i]+1);
rep(j,1,m){
if(s[i][j] == '*') continue;
id[i][j] = ++ nodecnt;
u = id[i][j];
if(s[i-1][j] == '.'){
v = id[i-1][j];
++ a[u][u]; ++ a[v][v];
-- a[u][v]; -- a[v][u];
}
if(s[i][j-1] == '.'){
v = id[i][j-1];
++ a[u][u]; ++ a[v][v];
-- a[u][v]; -- a[v][u];
}
}
}
int lim = nodecnt;
rep(i,1,n*m) rep(j,1,lim){
if(a[i][j] >= mod) a[i][j] -= mod;
if(a[i][j] < 0) a[i][j] += mod;
}
printf("%d\n",det(lim-1));
return 0;
}

bzoj 4031: 小Z的房间 矩阵树定理的更多相关文章

  1. 【bzoj4031】[HEOI2015]小Z的房间 矩阵树定理

    题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...

  2. bzoj4031 [HEOI2015]小Z的房间——矩阵树定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4031 矩阵树定理的模板题(第一次的矩阵树定理~): 有点细节,放在注释里了. 代码如下: # ...

  3. LG4111/LOJ2122 「HEOI2015」小Z的房间 矩阵树定理

    问题描述 LG4111 题解 矩阵树定理板子题. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; #defin ...

  4. BZOJ 4031: [HEOI2015]小Z的房间 [矩阵树定理 行列式取模]

    http://www.lydsy.com/JudgeOnline/problem.php?id=4031 裸题........ 问题在于模数是$10^9$ 我们发现消元的目的是让一个地方为0 辗转相除 ...

  5. BZOJ 4031: [HEOI2015]小Z的房间 (矩阵树定理 板题)

    背结论 : 度-邻 CODE1 O(n3logn)O(n^3logn)O(n3logn) #include <bits/stdc++.h> using namespace std; typ ...

  6. [HEOI2015]小Z的房间(矩阵树定理学习笔记)

    题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...

  7. [HEOI2015] 小Z的房间 - 矩阵树定理

    #include <bits/stdc++.h> using namespace std; #define int long long const int N = 105; const i ...

  8. [BZOJ 4031] 小Z的房间

    Link: BZOJ 4031 传送门 Solution: 矩阵树定理的模板题 看完下面两篇文章就会啦: 周冬论文:https://wenku.baidu.com/view/872eb02de2bd9 ...

  9. BZOJ 4031 [HEOI2015]小Z的房间(Matrix-Tree定理)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4031 [题目大意] 你突然有了一个大房子,房子里面有一些房间. 事实上,你的房子可以看 ...

随机推荐

  1. Centos 初始化服务器防火墙没有启动找不到/etc/sysconfig/iptables

    个人博客:https://blog.sharedata.info/ 具体步骤:添加规则然后重启防火墙自动生成防火墙文件1.iptables -P OUTPUT ACCEPT #添加出规则2.servi ...

  2. 【转】AC神组合数取模大全

    貌似少了几张图片,不过没有图片也没什么关系的感觉. 最后的究极篇也想出来了,但是貌似找不到题目,好尴尬.. 这个表示的是从n个元素中选取m个元素的方案数. (PS.组合数求模似乎只用在信息学竞赛和 A ...

  3. python多进程-----multiprocessing包

    multiprocessing并非是python的一个模块,而是python中多进程管理的一个包,在学习的时候可以与threading这个模块作类比,正如我们在上一篇转载的文章中所提,python的多 ...

  4. 使用google的GSON解析json格式的数据

    GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用.如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的li ...

  5. Linux开启防火墙后,设置允许通过的端口

    安装Firewall命令: yum install firewalld firewalld-config Firewall开启端口命令: firewall-cmd --zone=public --ad ...

  6. ExtASPNet web.config

    [转CSDN]:http://download.csdn.net/download/mcqq123321/4607708 修改 Web.config 打开 web.config,在 configura ...

  7. eclipse js调试

    问题: js经常会被浏览器给cache,不管怎么刷都是原来的. 解决: 暂时有一个方法,一刷新就好,下面的截图: 1)先打开 <开发者工具> 2)找到Sources 3)Page中找到你的 ...

  8. (转)复习TCP/IP协议与Http协议的区别

    TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据.关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只 ...

  9. 使用documentFragment

    function insertHtml(range, val) { var doc = range.doc, frag = doc.createDocumentFragment(); K('@' + ...

  10. 模仿jquery框架源码---网络

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Untitled Page& ...