給乙個\(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個格仔的格狀矩形,每個格仔是乙個房間或者是乙個柱子。在一開始的時候,相鄰的格仔之間都有牆隔著。你想要打通一些相鄰房間的牆,使得所有房間能夠互相到達。在此過程中,你不能把房子給打穿,或者打通柱子 以及柱子旁邊的牆 同時,...