【BZOJ4031】小Z的房间
Description
你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。
Input
第一行两个数分别表示n和m。
Output
一行一个整数,表示合法的方案数 Mod 10^9
Sample Input
...
...
.*.
Sample Output
HINT
对于前100%的数据,n,m<=9
【题解】
果果的矩阵树定理
构造邻接矩阵与度数矩阵之差的矩阵,求行列式;
由于:任意一行乘以一个常数加到另一行,矩阵的行列式不变。
又知:三角矩阵(上三角及下三角矩阵)的行列式就是它对角线上所有元素的乘积。
所以求出三角矩阵求行列式即可。
【code】
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
#define ull unsigned long long
#define file(s) freopen("s.in","r",stdin),freopen("s.out","w",stdout)
#define rep(k,i,j) for(int k = i;k <= j; ++k)
inline int read(){
int x = ,f = ; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-''; ch=getchar();}
return x*f;
}
const int mxn = +;
const int mod = 1e9;
int n,m,tot;
int s[mxn][mxn];
ll c[mxn][mxn]; inline void in(){
// tot = 0;
n = read(),m = read();
rep(i,,n){
char ch;
rep(j,,m){
cin >> ch;
if(ch=='.') s[i][j] = ++tot;
}
}
}
inline void add(int x,int y){
if(x>y) return;
c[x][x]++,c[y][y]++;
c[x][y]--,c[y][x]--;
}
inline void prewor(){
rep(i,,n){
rep(j,,m){
if(!s[i][j]) continue;
if(s[i-][j]) add(s[i][j],s[i-][j]);
if(s[i+][j]) add(s[i][j],s[i+][j]);
if(s[i][j-]) add(s[i][j],s[i][j-]);
if(s[i][j+]) add(s[i][j],s[i][j+]);
}
}
}
inline int gauss(){
int ans = ;
for(int i = ;i < tot; ++i){
for(int j = i+;j < tot; ++j){
while(c[j][i]){
int rate = c[i][i]/c[j][i];
for(int k = i;k < tot; ++k)
c[i][k] = (c[i][k]-rate*c[j][k]+mod)%mod;
swap(c[i],c[j]);
ans = -ans;
}
}
ans = (ans*c[i][i])%mod;
}
return (ans+mod)%mod;
}
inline void print(){
printf("%d\n",gauss());
}
int main(){
// file();
in();
prewor();
print();
return ;
}
【BZOJ4031】小Z的房间的更多相关文章
- 【bzoj4031】[HEOI2015]小Z的房间 解题报告
		
[bzoj4031][HEOI2015]小Z的房间 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含\(n*m\)个格子的格状矩形,每个格子是一个房 ...
 - 【BZOJ4031】小Z的房间(矩阵树定理)
		
[BZOJ4031]小Z的房间(矩阵树定理) 题面 BZOJ 洛谷 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子 ...
 - 【bzoj4031】[HEOI2015]小Z的房间 Matrix-Tree定理+高斯消元
		
[bzoj4031][HEOI2015]小Z的房间 2015年4月30日3,0302 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的 ...
 - 【bzoj4031】[HEOI2015]小Z的房间 && 【bzoj4894】天赋 (矩阵树定理)
		
来两道矩阵树模板: T1:[bzoj4031][HEOI2015]小Z的房间 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形 ...
 - 【BZOJ-4031】小z的房间     Matrix-Tree定理 + 高斯消元解行列式
		
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 937 Solved: 456[Submit][Statu ...
 - 【BZOJ4031】【HEOI2015】小Z的房间 [Matrix-Tree][行列式]
		
小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 你突然有了一个大房子,房子里面有 ...
 - bzoj 4031: [HEOI2015]小Z的房间 轮廓线dp
		
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 98 Solved: 29[Submit][Status] ...
 - [HEOI2015]小Z的房间 && [CQOI2018]社交网络
		
今天看了一下矩阵树定理,然后学了一下\(O(n ^ 3)\)的方法求行列式. 哦对了,所有的证明我都没看-- 这位大佬讲的好呀: [学习笔记]高斯消元.行列式.Matrix-Tree 矩阵树定理 关于 ...
 - [BZOJ 4031][LOJ 2122][HEOI 2015] 小Z的房间
		
[BZOJ 4031][LOJ 2122][HEOI 2015] 小Z的房间 题意 给定一个 \(n\times m\) 的矩阵, 一些格子是障碍, 相邻的格子(四联通)之间可以连边, 求把非障碍的格 ...
 - 【刷题】BZOJ 4031 [HEOI2015]小Z的房间
		
Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. ...
 
随机推荐
- Git 与 SVN 命令学习笔记
			
一:Git git config --global user.name "you name" #设置用户名git config --global user.email &quo ...
 - oracle xe 创建表空间
			
使用OracleXE控制台,我们会发现一个奇怪的现象:没有提供创建表空间.增加数据文件等功能.这似乎和我们使用Oracle标准版控制台不一样. 其实在OracleXE中可以创建新的表空间,不过一般情况 ...
 - 不偏移的天地图地图服务-ArcGIS版
			
地图偏移和纠偏是使用在线电子地图不可避免的话题.研究不深入,暂且分享一种已纠偏的地图服务. 服务地址 直接放点干货: 影像地图: http://t0.tianditu.com/cia_w/esri/w ...
 - [dev] 啥是Virtual Private Network
			
先来读wiki:https://en.wikipedia.org/wiki/Virtual_private_network 摘要: VPNs can be either remote-access ( ...
 - 分析servlet injection
			
@WebServlet("/cdiservlet") ||url映射 public class NewServlet extends HttpServlet { private M ...
 - C# 如何使用长度来切分字符串
			
参考网址:https://blog.csdn.net/yenange/article/details/39637211 using System; using System.Collections.G ...
 - python练习题-day16
			
1.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=["alex","wupeiqi","yuanhao" ...
 - 018-并发编程-java.util.concurrent.locks之-ReentrantReadWriteLock可重入读写锁
			
一.概述 ReentrantLock是一个排他锁,同一时间只允许一个线程访问,而ReentrantReadWriteLock允许多个读线程同时访问,但不允许写线程和读线程.写线程和写线程同时访问.相对 ...
 - await异步的,容易理解一点
			
C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: public class MyClass { public MyClass() { Displa ...
 - 从Joda-Time反观Java语言利弊
			
基本上每个企业应用系统都涉及到时间处理.我们知道,以前用java原生的Date+Calendar非常的不方便.后来Joda-Time诞生,这个专门处理日期/时间的库提供了DateTime类型,用它可以 ...