bzoj4031 小Z的房間

2022-01-31 22:25:08 字數 775 閱讀 6552

給乙個\(n\*m\)的矩陣,每個點可能為「.」或「*」,有多少種方法把矩陣中的點全部連線起來,並且每兩個點之間只有一條路徑。

題目所求的是乙個矩陣內的生成樹計數。很容易把這個矩陣轉化為乙個圖。現在我們要在這個圖上求生成樹計數。

這裡要用到matrix-tree定理。

這個定理的證明十分複雜,但是描述很簡單。

假設有\(n\)個點,我們的矩陣\(a\)的定義為 :

時間複雜度為:\(o(n^3*logn)\)

#include#includeusing namespace std;

typedef long long giant;

const int maxn=10;

const giant q=1e9;

const int maxm=maxn*maxn;

const int xx=;

const int yy=;

char s[maxn][maxn];

giant a[maxm][maxm];

void sw(giant a,giant b,int n)

int el(giant a,giant b,int t,int n)

if (!a[t]) sw(a,b,n),tf*=-1;

return tf;

}giant eliminate(int n)

} giant ans=eliminate(dx-1);

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

}

HEOI2015 BZOJ4031 小Z的房間

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

HEOI2015 bzoj4031 小z的房間

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

bzoj4031 HEOI2015 小Z的房間

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