SPOJ104 Highways,生成樹計數

2022-09-23 12:18:06 字數 699 閱讀 1293

高速公路(spoj104 highways)

乙個有n座城市的組成國家,城市1至n編號,其中一些城市之間可以修建高速公路。現在,需要有選擇的修建一些高速公路,從而組成乙個交通網路。你的任務是計算有多少種方案,使得任意兩座城市之間恰好只有一條路徑?

資料規模:1≤n≤12。

生成樹計數

演算法步驟:

1、 構建拉普拉斯矩陣

matrix[i][j] =

degree(i) , i==j

-1,i-j有邊

0,其他情況

2、 去掉第r行,第r列(r任意)

3、 計算矩陣的行列式

#include

#include

#include

#include

#include

using namespace std;

typedef long long ll;

const int maxn = 105;

const int maxm = 100005;

const int inf = 1e9;

int degree[maxn];

ll g[maxn][maxn];

int n, m;

ll det(ll a[maxn], int n)

{ ll ret = 1;

for(int i=1; i

SPOJ 104 矩陣樹定理 Highways

problem 給定乙個無向圖,求其不同的生成樹個數 solution 定義a鄰接矩陣,d度數矩陣,c基爾霍夫矩陣 c d a 根據matrix tree定理 生成樹個數等於基爾霍夫矩陣的n 1階矩陣的行列式絕對值 所以我們的c矩陣只用儲存n 1位 再用guass化成上三角矩陣 對角線的乘積的絕對值...

poj 2485 Highways 最小生成樹

題目大意 給出1 n的城鎮,現在需要修一條高速公路,使得任意城鎮可以互相來往 轉換之後就成了求最小生成樹中最長的邊 解題思路 input的是鄰接矩陣,直接用 prim 演算法 include include define max 501 define inf 0x3f3f3f3f int t,n,n...

POJ 1751 Highways 最小生成樹

題意 給你n個村莊的座標,然後再給你m行,每行的兩個數字代表公路兩端的村莊編號 1 n 問在花費最少的情況下還需建哪些路才能使所有村莊連通。思路 kruskal的話思路很明確,先建好邊集,然後將每條已經建好的路執行合併操作,即add a,b 然後再用kruskal輸出一遍每次建邊的兩個村莊編號就ok...