【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个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. ...
随机推荐
- Java课程寒假之开发记账本软件(网页版)之一
一.制定网页版记账本的基础功能 首先是下载了几个记账本APP,大致地看了一下记账本的功能:添加记录(支出,收入,自定义模板),查询流水(分类查询),账户. 二.开始做出框架 鉴于记账本有上面的功能,所 ...
- Java 中的 IO 与 socket 编程 [ 复习 ]
一.Unix IO 与 IPC Unix IO:Open-Read or Write-Close IPC:open socket - receive and send to socket - clos ...
- swust oj 962
括号匹配问题 1000(ms) 65535(kb) 3045 / 13375 假设表达式中允许包含两种括号:圆括号和方括号.编写一个算法判断表达式中的括号是否正确配对. 输入 由括号构成的字符串,包含 ...
- position inherit 定位
inherit 继承父元素 定位 举例 : <div class="father"> <p></p> </div> div{ ...
- python全栈开发 * 08知识点汇总 * 180608
08知识点梳理 文件操作一 .文件操作 r (只读)1.r (读) rb(字节)f=open("果蔬大杂烩",mode="r",encoding="U ...
- AttributeError: 'int' object has no attribute 'isdigit'(python下的isdigit函数)
python下的isdigit函数: isdigit() 方法检测字符串是否只由数字组成. 语法 isdigit()方法语法: str.isdigit() 示例代码如下: 结果: 我想说的重点在于 ...
- shop_z 一套非常适合二次开发的php后台管理系统
QQ群:247823727 如果你需要定制某些功能开联系群主,价格实惠,后期交接完善,有上手培训 shop_z基础thinkphp5 php7上开发运行,速度杠杠的 地址:https://gitee ...
- ssh无输入密码登录问题
每天一个Linux命令:ps命令 ssh原理和运用(一):远程登录 http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html SSH是每 ...
- mimikaz常用命令
常用命令,留着自己使用的时候方便查找 mimikatz是一款功能强大的轻量级调试神器,通过它你可以提升进程权限注入进程读取进程内存,当然他最大的亮点也是让阿刚最感兴趣的就是他可以直接从 lsass中获 ...
- 委托/lambda表达式/事件
委托 委托是执行安全的类,它的使用方式与类类似(即都需要定义再实例化),不同在于,类在实例化之后叫对象或类的实例,但委托在实例化后仍叫委托,委托可以把函数作为参数传递. 语法声明: delegate ...