HEOI2015 BZOJ4031 小Z的房間

2021-07-04 13:31:01 字數 1268 閱讀 1466

description

你突然有了乙個大房子,房子裡面有一些房間。事實上,你的房子可以看做是乙個包含n*m個格仔的格狀矩形,每個格仔是乙個房間或者是乙個柱子。在一開始的時候,相鄰的格仔之間都有牆隔著。

你想要打通一些相鄰房間的牆,使得所有房間能夠互相到達。在此過程中,你不能把房子給打穿,或者打通柱子(以及柱子旁邊的牆)。同時,你不希望在房子中有小偷的時候會很難抓,所以你希望任意兩個房間之間都只有一條通路。現在,你希望統計一共有多少種可行的方案。

input

第一行兩個數分別表示n和m。

接下來n行,每行m個字元,每個字元都會是』.』或者』』,其中』.』代表房間,』』代表柱子。

output

一行乙個整數,表示合法的方案數 mod 10^9

sample input

3 3sample output

15 hint

對於前100%的資料,n,m<=9

source

裸矩陣樹定理題.

要注意的是兩個房間之間只有一條邊.然後一定記得把牆拿走.

**又醜又長233

#include

#include

#include

#include

#include

#define maxn 12

#define p 1000000000

using

namespace

std;

int a[maxn][maxn],num[maxn][maxn];

char ch[maxn];

int d[maxn*maxn][maxn*maxn],a[maxn*maxn][maxn*maxn],c[maxn*maxn][maxn*maxn];

int n,m,top;

long

long calc()

return (ret+p)%p;

}int main()

for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++)

if (a[i][j]>1) num[i][j]=++top;

for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++)

for (int i=1;i<=top;i++)

for (int j=1;j<=top;j++)

c[i][j]=d[i][j]-a[i][j];

cout

<}

bzoj4032 HEOI2015 最短不公共子串

字尾自動機 序列自動機 序列自動機這東西好像很高階的樣子。其實很簡單的啦。詳細可以看一下我的部落格序列自動機 對字串a構建字尾自動機 str a 和序列自動機 seq a 類似地,對字串b也構建字尾自動機 str b 和序列自動機 seq b 然後對於4個詢問我們分別拿出1個自動機,如第乙個詢問拿出...

bzoj4027 heoi2015 兔子與櫻花

time limit 10 sec memory limit 256 mb submit 360 solved 187 submit status discuss 很久很久之前,森林裡住著一群兔子。有一天,兔子們突然決定要去看櫻花。兔子們所在森林裡的櫻花樹很特殊。櫻花樹由n個樹枝分叉點組成,編號從0...

BZOJ4027 HEOI2015 兔子與櫻花

bzoj4027 一開始想的都是二維的dp 資料這麼大怎麼轉移啊qa q 後來發現原來貪心就行辣。直接記ans i so ni c i 那麼將這個點刪除對應著其父節點 ansi 1那麼對於某個點 x 將兒子的an s值從小到大排徐,然後依次刪直到不能刪為止。然後刪下面的比刪上面的優。因為刪某個點 x...