[BZOJ 4031][LOJ 2122][HEOI 2015] 小Z的房间
[BZOJ 4031][LOJ 2122][HEOI 2015] 小Z的房间
题意
给定一个 \(n\times m\) 的矩阵, 一些格子是障碍, 相邻的格子(四联通)之间可以连边, 求把非障碍的格子连成一棵树的方案数量 \(\bmod 10^9\) 的值.
\(n,m\le 9\).
题解
一些奇怪的东西
做题过程:
- 这个数据范围怎么这么像大力状压啊
- 怎么还要联通性啊不会是插头DP吧
- woc连成树? 矩阵树定理sb题?
- 码码码...
- 哦淦这个模数怎么没逆元啊QAQ
正经内容
其实就是个矩阵树定理sb题...
矩阵树定理内容:
一个 \(n\) 个点的图的生成树个数即为其 Laplacian 矩阵的任一 \(n-1\) 阶余子式的行列式的值.
构造出Laplacian矩阵, 丢掉一行一列然后高斯消元消成上三角, 最后把对角线上的元素乘起来就是答案了.
但是这题高消的时候遇到了一些问题: 没有逆元.
这就比较辣手了qwq...
但是我们可以用另一个高端操作来消元: 辗转相除.
辗转相除求 \(\gcd\) 的时候最后一定能把其中一个值消成 \(0\), 此时另一个值就是 \(\gcd\). 但是这里我们关注点不是 \(\gcd\) 而是如何把其中一个值消成 \(0\).
但是初等行变换可没有整行取模这种操作.
考虑取模本质上是什么. 我们不难得到下面这个显然的式子:
\]
这样我们就可以用 \(\left \lfloor \frac a p \right \rfloor\) 做系数来初等行变换消元了. 消一个 \(n\) 阶矩阵的时间复杂度是 \(O(n^3\log p)\) 的.
总时间复杂度 \(O\big((nm)^3\log p\big)\).
参考代码
#include <bits/stdc++.h>
const int MOD=1e9;
const int MAXN=110;
typedef long long intEx;
const int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n;
int m;
int cnt;
int id[MAXN][MAXN];
std::vector<intEx> mt[MAXN];
int GaussDet(int);
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char ch;
scanf(" %c",&ch);
if(ch=='.')
id[i][j]=++cnt;
}
}
for(int i=1;i<=cnt;i++)
mt[i].resize(cnt+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(id[i][j]){
for(int k=0;k<4;k++){
if(id[i+d[k][0]][j+d[k][1]]){
--mt[id[i+d[k][0]][j+d[k][1]]][id[i][j]];
++mt[id[i][j]][id[i][j]];
}
}
}
}
}
printf("%d\n",GaussDet(cnt));
return 0;
}
int GaussDet(int n){
intEx ans=1;
for(int i=1;i<n;i++){
for(int j=i+1;j<n;j++){
while(mt[j][i]!=0){
intEx r=mt[i][i]/mt[j][i];
for(int k=i;k<n;k++)
(mt[i][k]-=r*mt[j][k])%=MOD;
std::swap(mt[i],mt[j]);
ans=-ans;
}
}
(ans*=mt[i][i])%=MOD;
}
return (ans%MOD+MOD)%MOD;
}
[BZOJ 4031][LOJ 2122][HEOI 2015] 小Z的房间的更多相关文章
- bzoj 4031: 小Z的房间 矩阵树定理
bzoj 4031: 小Z的房间 矩阵树定理 题目: 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时 ...
- bzoj 4031: [HEOI2015]小Z的房间 轮廓线dp
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 98 Solved: 29[Submit][Status] ...
- 【刷题】BZOJ 4031 [HEOI2015]小Z的房间
Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. ...
- 【BZOJ 4031】 4031: [HEOI2015]小Z的房间 (Matrix-Tree Theorem)
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1089 Solved: 533 Description ...
- BZOJ 4031: [HEOI2015]小Z的房间 高斯消元 MartixTree定理 辗转相除法
4031: [HEOI2015]小Z的房间 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4031 Description 你突然有了一个 ...
- 【BZOJ-4031】小z的房间 Matrix-Tree定理 + 高斯消元解行列式
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 937 Solved: 456[Submit][Statu ...
- 【BZOJ4031】小Z的房间(矩阵树定理)
[BZOJ4031]小Z的房间(矩阵树定理) 题面 BZOJ 洛谷 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子 ...
- 【bzoj4031】[HEOI2015]小Z的房间 Matrix-Tree定理+高斯消元
[bzoj4031][HEOI2015]小Z的房间 2015年4月30日3,0302 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的 ...
- [HEOI2015]小Z的房间 && [CQOI2018]社交网络
今天看了一下矩阵树定理,然后学了一下\(O(n ^ 3)\)的方法求行列式. 哦对了,所有的证明我都没看-- 这位大佬讲的好呀: [学习笔记]高斯消元.行列式.Matrix-Tree 矩阵树定理 关于 ...
随机推荐
- 【LeetCode题解】136_只出现一次的数字
目录 [LeetCode题解]136_只出现一次的数字 描述 方法一:列表操作 思路 Java 实现 Python 实现 方法二:哈希表 思路 Java 实现 Python 实现 方法三:数学运算 思 ...
- UML与ER图
UML 统一建模语言(Unified Modeling Language, UML)是一种描述软件系统结构的图形化语言. 类图 类图用于描述类之间的关系,类图中主要的关系包括: 聚集 带空心菱形的实心 ...
- [转]Asp.Net 网站多语言解决方案
本文转自:https://www.cnblogs.com/FredTang/archive/2013/01/23/2873231.html 最近领导要求实现PMSWeb应用程序的多区域语言的支持,所以 ...
- 消息管理-activemq
1.ConnectionFactory("tcp://192.168.1.103:61616/"); 本机地址192.168.1.103 也 可以是localhost 消息的生产者 ...
- VB里的 dim是什么意思?
Dim为Dimension的缩写,后面加上所需变量的名字As为变量指定类型程序运行时,Dim语句就根据变量类型为变量分配内存空间
- 【原】戏说Java
戏说Java 本文只是个人闲余之际写的,查阅了些许资料,仅当娱乐.如有雷同,纯属巧合. 如果要学好一个东西,就应该要把他拟人化,当做一个你的好朋友,对他产生兴趣,那么你自然而然就会学习好他了.俗话 ...
- Angular的表单组件
创建表单元素 在上一节中,我们学习了如何创建一个组件login,现在将login改造一下, 在template中添加html表单元素,#usernameRef表示input元素id,如果想传递inpu ...
- 【JavaScript 从零开始】表达式和运算符(2)
in运算符 in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象. 如果右侧的对象拥有一个名为做操作数值的属性名,那么表达式返回true,例如: var point= ...
- Gson 使用new TypeToken<List<String>>(){}.getType() 为什么有 {}?
前言:使用 gson 时,不明白为什么有这种写法:new TypeToken<List<String>>(){}.getType(),所以来解惑.最终发现其实就是自己的 jav ...
- vue+element ui 的时间控件选择 年月日时分
前言:工作中用到 vue+element ui 的前端框架,需要选择年月日时分,但element ui官网demo有没有,所以记录一下.转载请注明出处:https://www.cnblogs.com/ ...