SPOJ 104 矩陣樹定理 Highways

2022-08-13 09:54:13 字數 949 閱讀 7116

problem:

給定乙個無向圖,求其不同的生成樹個數

solution:

定義a鄰接矩陣,d度數矩陣,c基爾霍夫矩陣

c=d-a

根據matrix-tree定理:生成樹個數等於基爾霍夫矩陣的n-1階矩陣的行列式絕對值

所以我們的c矩陣只用儲存n-1位

再用guass化成上三角矩陣

對角線的乘積的絕對值就是答案

附上**:

#includeusing

namespace

std;

const

double eps=1e-9

;const

int n=25

;int a[n][n],d[n][n];//

a是鄰接矩陣,d是度數矩陣

double c[n][n];//

c是基爾霍夫矩陣

intn,m;

void

gauss()

for(int j=1;j<=n;j++) swap(c[x][j],c[now][j]);

for(int j=now+1;j<=n;j++)

now++;

}double ans=1

;

for(int i=1;i<=n;i++) ans*=c[i][i];

ans=fabs(ans);

printf(

"%.0lf\n

",ans);

}int

main()

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

c[i][j]=d[i][j]-a[i][j];

gauss();

}return0;

}

SPOJ104 Highways,生成樹計數

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

矩陣樹定理

構建基爾霍夫矩陣,基爾霍夫矩陣的任意乙個代數余子式是所有生成樹的邊權積的和,也就是求的是 sum limits t prod limits v e 基爾霍夫矩陣為度數矩陣減去鄰接矩陣 任意去掉一行一列,所得到的矩陣的行列式即為所求 外向樹為入度矩陣減去鄰接矩陣 內向樹出度矩陣減去鄰接矩陣 刪去根所在...

矩陣樹定理

includeusing namespace std const int n 505 const long long mod 1e4 7 long long det long long a n n int n 0 n 1 求行列式的值 long long tmp 1 for int i 0 i n ...