【BZOJ-4031】小z的房间 Matrix-Tree定理 + 高斯消元解行列式
4031: [HEOI2015]小Z的房间
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 937 Solved: 456
[Submit][Status][Discuss]
Description
你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。
Input
第一行两个数分别表示n和m。
Output
一行一个整数,表示合法的方案数 Mod 10^9
Sample Input
...
...
.*.
Sample Output
HINT
对于前100%的数据,n,m<=9
Source
Solution
矩阵树定理模板题
自己脑残WA了两次...第一次是因为Gauss消元求行列式时把最后一行一起搞了...和直接输出0没区别...
第二次是因为手残打反NM...
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define LL long long
#define P 1000000000
char mp[50][50];
int N,M,dx[4]={-1,0,1,0},dy[4]={0,1,0,-1},A[100][100],D[100][100],id[10][10],ID;
LL G[100][100]; inline bool check(int x,int y) {return x>=1&&x<=N&&y>=1&&y<=M&&mp[x][y]!='*';}
inline void InsertEdge(int u,int v) {D[v][v]++; A[u][v]=1;}
inline LL Gauss()
{
int f=1; LL ans=1; ID--; for (int i=1; i<=ID; i++)
for (int j=1; j<=ID; j++)
G[i][j]=(G[i][j]+P)%P; // for (int i=1; i<=ID; i++,puts(""))
// for (int j=1; j<=ID; j++) printf("%d ",G[i][j]); for (int i=1; i<=ID; i++) {
for (int j=i+1; j<=ID; j++) {
LL x=G[i][i],y=G[j][i];
while (y) {
LL t=x/y; x%=y; swap(x,y);
for (int k=i; k<=ID; k++)
G[i][k]=(G[i][k]-t*G[j][k]%P+P)%P;
for (int k=i; k<=ID; k++)
swap(G[i][k],G[j][k]);
f=-f;
}
} if (!G[i][i]) return 0;
ans=ans*G[i][i]%P;
} if (f==-1) return (P-ans)%P;
return ans;
} int main()
{
// freopen("room.in","r",stdin);
// freopen("room.out","w",stdout); scanf("%d%d",&N,&M);
for (int i=1; i<=N; i++) scanf("%s",mp[i]+1); for (int i=1; i<=N; i++)
for (int j=1; j<=M; j++) if (mp[i][j]!='*') id[i][j]=++ID; for (int i=1; i<=N; i++)
for (int j=1; j<=M; j++)
if (mp[i][j]!='*')
for (int d=0; d<4; d++) {
int tx=i+dx[d],ty=j+dy[d];
if (check(tx,ty)) InsertEdge(id[i][j],id[tx][ty]);
} for (int i=1; i<=ID; i++)
for (int j=1; j<=ID; j++) G[i][j]=D[i][j]-A[i][j]; printf("%lld\n",Gauss()); return 0;
}
【BZOJ-4031】小z的房间 Matrix-Tree定理 + 高斯消元解行列式的更多相关文章
- bzoj 4031: 小Z的房间 矩阵树定理
bzoj 4031: 小Z的房间 矩阵树定理 题目: 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时 ...
- BZOJ.4031.[HEOI2015]小Z的房间(Matrix Tree定理 辗转相除)
题目链接 辗转相除解行列式的具体实现? 行列式的基本性质. //864kb 64ms //裸的Matrix Tree定理.练习一下用辗转相除解行列式.(因为模数不是质数,所以不能直接乘逆元来高斯消元. ...
- [BZOJ 4031] 小Z的房间
Link: BZOJ 4031 传送门 Solution: 矩阵树定理的模板题 看完下面两篇文章就会啦: 周冬论文:https://wenku.baidu.com/view/872eb02de2bd9 ...
- BZOJ 4031: [HEOI2015]小Z的房间(Matrix Tree)
传送门 解题思路 矩阵树定理模板题.矩阵树定理是求图中最小生成树个数,做法是首先求出基尔霍夫矩阵,就是度数矩阵\(-\)邻接矩阵.然后再求出这个矩阵的行列式,行列式的求法就是任意去掉一行一列,然后高斯 ...
- 【bzoj4031】[HEOI2015]小Z的房间 Matrix-Tree定理+高斯消元
[bzoj4031][HEOI2015]小Z的房间 2015年4月30日3,0302 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的 ...
- [HEOI2015]小Z的房间(矩阵树定理学习笔记)
题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...
- 【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元
如果纯模拟,就会死循环,而随着循环每个点的期望会逼近一个值,高斯消元就通过列方正组求出这个值. #include<cstdio> #include<cctype> #inclu ...
- BZOJ 2844 albus就是要第一个出场(高斯消元)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2844 题意: 给出一个长度为n的正整数数列A.每次选出A的一个子集进行抑或(空集抑或值为 ...
- BZOJ 4031: [HEOI2015]小Z的房间 [矩阵树定理 行列式取模]
http://www.lydsy.com/JudgeOnline/problem.php?id=4031 裸题........ 问题在于模数是$10^9$ 我们发现消元的目的是让一个地方为0 辗转相除 ...
随机推荐
- vue 获取后端数据打印结果undefined问题
今天做项目时后端有一个要展示到页面上的附件需要前端获取,我获取到了那个附件的信息,但打印fj.name或fj.url时控制台就会显示undefined,后来才发现是json数据没有解析对,应该使用JS ...
- POJ - 3436 ACM Computer Factory(最大流)
https://vjudge.net/problem/POJ-3436 题目描述: 正如你所知道的,ACM 竞赛中所有竞赛队伍使用的计算机必须是相同的,以保证参赛者在公平的环境下竞争.这就是所有这些 ...
- bzoj千题计划178:bzoj2425: [HAOI2010]计数
http://www.lydsy.com/JudgeOnline/problem.php?id=2425 题意转化: 给定一个集合S,求S的全排列<给定排列 的排列个数 从最高位开始逐位枚举确定 ...
- HDU 1729 类NIM 求SG
每次有n个盒子,每个盒子有容量上限,每次操作可以放入石头,数量为不超过当前盒子中数量的平方,不能操作者输. 一个盒子算一个子游戏. 对于一个盒子其容量为s,当前石子数为x,那么如果有a满足 $a \t ...
- react componentWillReceiveProps 使用注意
componentWillReceiveProps(nextProps) 请务必使用 nextProps 不要使用 this.props 1个小时的教训...
- Codeforces 237 div2 B. Marathon(关于精度损失的教训)
题目链接:http://codeforces.com/contest/404/problem/B?csrf_token=6292hf3e1h4g5e0d16a996ge6bgcg7g2 解题报告:一个 ...
- ffmpeg查看音频文件信息
查看音频文件的信息(基于本地路径) import subprocess import json path = r'D:\learn\download\NosVJ60QCIs0b8PVHMPomZJsr ...
- Ubuntu GNOME单击任务栏图标最小化设置
在Ubuntu GNOME的发行版中,桌面使用的是GNOME,GNOME可以像Windows那样有一个底部任务栏,在Ubuntu GNOME中它称为 dash to dock,如下图: Windows ...
- Dream_Spark-----Spark 定制版:003~Spark Streaming(三)
Spark 定制版:003~Spark Streaming(三) 本讲内容: a. Spark Streaming Job 架构和运行机制 b. Spark Streaming Job 容错架构和运行 ...
- nginx tomcat 自动部署python脚本【转】
#!/usr/bin/env python #--coding:utf8-- import sys,subprocess,os,datetime,paramiko,re local_path='/ho ...