bzoj4031 HEOI2015 小Z的房間

2021-08-17 03:18:47 字數 973 閱讀 3052

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

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

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

實際上最後要變成一棵樹,那麼就是矩陣樹定理的運用了。不同之處在於這裡要取模,而且模數是乙個合數

我們知道對於模數是質數的情況可以乘法逆元,不為質數就用類似輾轉相除的方法做

注意要去掉一行一列來求行列式

#include 

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

typedef

long

long ll;

const

int mod=1000000000;

const

int n=122;

const

int l=11;

int id[l][l];

int dx[4]=;

int dy[4]=;

ll a[n][n];

char rc[l][l];

ll det(int n)

}if (!a[i][i]) return

0; ret=ret*a[i][i]%mod;

}return (ret+mod)%mod;

}int main(void)

}ll ans=det(tot-1);

printf("%lld\n", ans);

return

0;}

HEOI2015 BZOJ4031 小Z的房間

description 你突然有了乙個大房子,房子裡面有一些房間。事實上,你的房子可以看做是乙個包含n m個格仔的格狀矩形,每個格仔是乙個房間或者是乙個柱子。在一開始的時候,相鄰的格仔之間都有牆隔著。你想要打通一些相鄰房間的牆,使得所有房間能夠互相到達。在此過程中,你不能把房子給打穿,或者打通柱子 ...

HEOI2015 bzoj4031 小z的房間

description 你突然有了乙個大房子,房子裡面有一些房間。事實上,你的房子可以看做是乙個包含n m個格仔的格狀矩形,每個格仔是乙個房間或者是乙個柱子。在一開始的時候,相鄰的格仔之間都有牆隔著。你想要打通一些相鄰房間的牆,使得所有房間能夠互相到達。在此過程中,你不能把房子給打穿,或者打通柱子 ...

BZOJ4031 HEOI2015 小Z的房間

試題描述 你突然有了乙個大房子,房子裡面有一些房間。事實上,你的房子可以看做是乙個包含 n times m 個格仔的格狀矩形,每個格仔是乙個房間或者是乙個柱子。在一開始的時候,相鄰的格仔之間都有牆隔著。你想要打通一些相鄰房間的牆,使得所有房間能夠互相到達。在此過程中,你不能把房子給打穿,或者打通柱子...