bzoj 4031: [HEOI2015]小Z的房间【矩阵树定理】
是板子题,因为mod不是质数所以需要辗转相除然而并不知道为啥
高斯消元部分还不知道原理呢……先无脑背过的
#include<iostream>
#include<cstdio>
using namespace std;
const int N=105,dx[]={-1,1,0,0},dy[]={0,0,-1,1},mod=1e9;
int n,m,id[N][N],a[N][N],tot;
char c[N][N];
bool ok(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m&&c[x][y]!='*';
}
int gaosi(int n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]<0)
a[i][j]+=mod;
long long ans=1,f=1;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
long long x=a[i][i],y=a[j][i];
while(y)
{
long long t=x/y;
x%=y;
swap(x,y);
for(int k=i;k<=n;k++)
a[i][k]=(a[i][k]-a[j][k]*t%mod+mod)%mod;
for(int k=i;k<=n;k++)
swap(a[i][k],a[j][k]);
f=-f;
}
}
if(!a[i][i])
return 0;
ans=ans*a[i][i]%mod;
}
return f==-1?(mod-ans)%mod:ans;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%s",c[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(c[i][j]!='*')
id[i][j]=++tot;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(c[i][j]!='*')
for(int k=0;k<4;k++)
if(ok(i+dx[k],j+dy[k]))
a[id[i][j]][id[i][j]]++,a[id[i][j]][id[i+dx[k]][j+dy[k]]]--;
printf("%d\n",gaosi(tot-1));
return 0;
}
bzoj 4031: [HEOI2015]小Z的房间【矩阵树定理】的更多相关文章
- BZOJ 4031: [HEOI2015]小Z的房间 [矩阵树定理 行列式取模]
http://www.lydsy.com/JudgeOnline/problem.php?id=4031 裸题........ 问题在于模数是$10^9$ 我们发现消元的目的是让一个地方为0 辗转相除 ...
- BZOJ 4031: [HEOI2015]小Z的房间 (矩阵树定理 板题)
背结论 : 度-邻 CODE1 O(n3logn)O(n^3logn)O(n3logn) #include <bits/stdc++.h> using namespace std; typ ...
- 【bzoj4031】[HEOI2015]小Z的房间 矩阵树定理
题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...
- bzoj4031 [HEOI2015]小Z的房间——矩阵树定理
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4031 矩阵树定理的模板题(第一次的矩阵树定理~): 有点细节,放在注释里了. 代码如下: # ...
- BZOJ 4031 [HEOI2015]小Z的房间(Matrix-Tree定理)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4031 [题目大意] 你突然有了一个大房子,房子里面有一些房间. 事实上,你的房子可以看 ...
- BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)
题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...
- [HEOI2015]小Z的房间(矩阵树定理学习笔记)
题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...
- [HEOI2015] 小Z的房间 - 矩阵树定理
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 105; const i ...
- 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] ...
随机推荐
- openstack -> openinfra
https://www.openstack.org/assets/software/projectmap/openstack-map.pdf
- eclipse中自动生成注释
eclipse中自动生成注释 包前缀设置的地方 注释模板设置的地方 Eclipse自动生成方法注释 快捷键 自动生成方法的注释格式,例如 /*** @param str* @return* @thro ...
- 九度oj 题目1181:遍历链表
题目1181:遍历链表 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3483 解决:1465 题目描述: 建立一个升序链表并遍历输出. 输入: 输入的每个案例中第一行包括1个整数:n(1 ...
- CentOS 7.1安装GNOME,开启VNC Server
版权声明:本文为博主原创文章,未经博主允许不得转载. A.准备: 1.安装GNOME Desktop yum groupinstall 'GNOME Desktop' 2.确认GNOME Deskto ...
- Ubuntu 12.04 之 虚拟主机的配置
Ubuntu 12.04 之 虚拟主机的配置 (1)打开etc/hosts文件 增加: 127.0.0.1 study.ubuntu.com 127.0.0.1 hello.ubuntu.com 12 ...
- poj——1470 Closest Common Ancestors
Closest Common Ancestors Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 20804 Accept ...
- springmvc json 数据
这里是controllor层 @RequestMapping("/traceupdatestatus") @ResponseBody public boolean traceupd ...
- Django学习系列之Form表单结合ajax
Forms结合ajax Forms的验证流程: 定义用户输入规则的类,字段的值必须等于html中name属性的值(pwd= forms.CharField(required=True)=<i ...
- 正则表达式lookahead and lookbehind zero-length assertions
正则表达式非常好的网站: https://www.regular-expressions.info/lookaround.html ---------------------------------- ...
- Ubuntu 16.04 LTS 搭建LAMP
1. LAMP是一系列自由和开源软件的集合,包含了Linux.Web服务器(Apache).数据库服务器(MySQL)和PHP(脚本语言). Apache2 Web 服务器的安装 sudo apt i ...