[BZOJ 4031][LOJ 2122][HEOI 2015] 小Z的房间

题意

给定一个 \(n\times m\) 的矩阵, 一些格子是障碍, 相邻的格子(四联通)之间可以连边, 求把非障碍的格子连成一棵树的方案数量 \(\bmod 10^9\) 的值.

\(n,m\le 9\).

题解

一些奇怪的东西

做题过程:

  1. 这个数据范围怎么这么像大力状压啊
  2. 怎么还要联通性啊不会是插头DP吧
  3. woc连成树? 矩阵树定理sb题?
  4. 码码码...
  5. 哦淦这个模数怎么没逆元啊QAQ

正经内容

其实就是个矩阵树定理sb题...

矩阵树定理内容:

一个 \(n\) 个点的图的生成树个数即为其 Laplacian 矩阵的任一 \(n-1\) 阶余子式的行列式的值.

构造出Laplacian矩阵, 丢掉一行一列然后高斯消元消成上三角, 最后把对角线上的元素乘起来就是答案了.

但是这题高消的时候遇到了一些问题: 没有逆元.

这就比较辣手了qwq...

但是我们可以用另一个高端操作来消元: 辗转相除.

辗转相除求 \(\gcd\) 的时候最后一定能把其中一个值消成 \(0\), 此时另一个值就是 \(\gcd\). 但是这里我们关注点不是 \(\gcd\) 而是如何把其中一个值消成 \(0\).

但是初等行变换可没有整行取模这种操作.

考虑取模本质上是什么. 我们不难得到下面这个显然的式子:

\[a\bmod b=a-\left \lfloor \frac a b \right \rfloor b
\]

这样我们就可以用 \(\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的房间的更多相关文章

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

    bzoj 4031: 小Z的房间 矩阵树定理 题目: 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时 ...

  2. bzoj 4031: [HEOI2015]小Z的房间 轮廓线dp

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 98  Solved: 29[Submit][Status] ...

  3. 【刷题】BZOJ 4031 [HEOI2015]小Z的房间

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

  4. 【BZOJ 4031】 4031: [HEOI2015]小Z的房间 (Matrix-Tree Theorem)

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1089  Solved: 533 Description ...

  5. BZOJ 4031: [HEOI2015]小Z的房间 高斯消元 MartixTree定理 辗转相除法

    4031: [HEOI2015]小Z的房间 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4031 Description 你突然有了一个 ...

  6. 【BZOJ-4031】小z的房间 Matrix-Tree定理 + 高斯消元解行列式

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 937  Solved: 456[Submit][Statu ...

  7. 【BZOJ4031】小Z的房间(矩阵树定理)

    [BZOJ4031]小Z的房间(矩阵树定理) 题面 BZOJ 洛谷 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子 ...

  8. 【bzoj4031】[HEOI2015]小Z的房间 Matrix-Tree定理+高斯消元

    [bzoj4031][HEOI2015]小Z的房间 2015年4月30日3,0302 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的 ...

  9. [HEOI2015]小Z的房间 && [CQOI2018]社交网络

    今天看了一下矩阵树定理,然后学了一下\(O(n ^ 3)\)的方法求行列式. 哦对了,所有的证明我都没看-- 这位大佬讲的好呀: [学习笔记]高斯消元.行列式.Matrix-Tree 矩阵树定理 关于 ...

随机推荐

  1. win10装系统--笔记

    U盘安装WIN10时显示 windows无法安装到这个磁盘 选中的磁盘采用GPT分区形式 一.原因分析 win8/win10系统均添加快速启动功能,预装的win8/win10电脑默认都是UEFI引导和 ...

  2. i.mx6 Android5.1.1 build解析

    参考资料:理解 Android Build 系统 把总结放前面: 1. 常用编译命令 make clean 执行清理,等同于:rm -rf out/. make sdk 编译出 Android 的 S ...

  3. [转]SQL SERVER数据库删除LOG文件和清空日志的方案

    本文转自:https://www.cnblogs.com/ShaYeBlog/archive/2012/09/04/2670505.html 数据库在使用过程中会使日志文件不断增加,使得数据库的性能下 ...

  4. springboot之定时任务@Scheduled

    1.pom.xml中导入必要的依赖: <parent> <groupId>org.springframework.boot</groupId> <artifa ...

  5. [C语言] 数据结构-逻辑结构和物理结构

    数据结构:相互之间存在一种或多种特定关系的数据元素的集合 1.数据结构分为逻辑结构和物理结构 集合结构:集合结构中的数据元素除了同属于一个集合外,他们之间没有其他关系 线性结构:线性结构中的数据元素之 ...

  6. Java基础教程(14)--嵌套类

      Java允许在一个类中定义另外一个类,这样的类被称为嵌套类,就像下面这样: class OuterClass { ... class NestedClass { ... } }   嵌套类分为两种 ...

  7. MYSQL与MSSQL对比学习

    最近在将公司的一个产品里面相关的MSSQL语句修改为可以在MYSQL上执行的语句 l  优点分析: MYSQL短小精悍,容易上手,操作简单,免费供用的.相对其它数据库有特色又实用的语法多一些.SQL怎 ...

  8. 微信网页授权获取code

    <script> var code = GetQueryString('code'); var callback = 'personal.html'; var appId = " ...

  9. 语义化的HTML及其目的

    一.什么是语义化的HTML? 语义化的HTML就是写出的HTML代码,符合内容的结构化(内容语义化),选择合适的标签(代码语义化),能够便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地 ...

  10. 【小程序】返回顶部wx.pageScrollTo和scroll-view的对比

    一.wx.pageScrollTo(https://mp.weixin.qq.com/debug/wxadoc/dev/api/scroll.html) 1. 小程序中双击顶部的textbar.会默认 ...