其實是矩陣樹定理模板題。
但是要注意不合法的情況預處理的時候設定成0,要不然計算行列式的時候有問題。直接跳過不合法情況,不給它建立新點就行了。
**如下:
#include#include#include#include#define mod 1000000000
using namespace std;
int n,m,cnt;
long long ans=1;
char cur[20][20];
int d[110][110],a[110][110],c[110][110],trans[20][20];
int main()
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(cur[i][j]=='.')
n=cnt;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
c[i][j]=d[i][j]-a[i][j];
for(int i=2;i<=n;i++)
for(int j=i+1;j<=n;j++)
while(c[j][i])
for(int i=2;i<=n;i++)
ans=1ll*ans*c[i][i]%mod;
printf("%lld\n",(ans+mod)%mod);
return 0;
}
矩陣樹定理 HEOI2015 小Z的房間
傳送門 矩陣樹定理 一張圖的基爾霍夫矩陣即為其度數矩陣 鄰接矩陣,度數矩陣中d i i d i i d i i 為點i的度 一張圖的生成樹個數即為其基爾霍夫矩陣的行列式 code include define int long long define n 90 define mod 10000000...
P4111 HEOI2015 小Z的房間
你的房子可以看做是乙個包含n m個格仔的格狀矩形,每個格仔是乙個房間或者是乙個柱子。在一開始的時候,相鄰的格仔之間都有牆隔著。你想要打通一些相鄰房間的牆,使得所有房間能夠互相到達。在此過程中,你不能把房子給打穿,或者打通柱子 以及柱子旁邊的牆 同時,你不希望在房子中有小偷的時候會很難抓,所以你希望任...
P4111 HEOI2015 小Z的房間
傳送門 轉換題意後就是問你生成樹的方案數 就是裸的矩陣樹定理 不會證明,只懂結論 對於乙個無向圖 g 定義g的度數矩陣 d g 是乙個 n n 的矩陣,並且滿足 當 i j 時,d i j 0,當 i j 時,d i j 等於 vi 的度數 定義g的鄰接矩陣 a g 是乙個 n n 的矩陣,並且滿足...