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...