1. 程式人生 > >[模板] 矩陣樹定理

[模板] 矩陣樹定理

題目描述:

給一個無向圖,求圖上生成樹的數量.

題目分析:

矩陣樹定理就是用於解決圖上的生成樹的計數問題的.
先構造兩個矩陣
A為鄰接矩陣 若 u v 有邊 A[u][v]++ A[v][u]++
B為度數矩陣 若 u v 有邊 則 B[u][u]++ B[v][v]++
最後構造矩陣 C=B-A
刪去矩陣C任意元素 Ci,j 所在的行列
求這個矩陣的行列式的絕對值即為答案!
沒有取模,有取模的高斯消元不太一樣…
具體介紹等我學明白了,再寫一篇部落格吧…

題目連結:

Ac 程式碼:

#include <cstdio>
#include <iostream>
#include <algorithm> #include <cmath> #include <cstring> #define ll long long const int maxm=20; ll C[maxm][maxm],d[maxm]; int n,m; inline ll Matrix_Tree(ll a[][maxm]) { ll ret=1; for(int i=2;i<=n;i++) { for(int j=i+1;j<=n;j++) while(a[j][i]) { ll t=a[i][i]/a[j][i]; for
(int k=i;k<=n;k++) a[i][k]=(a[i][k]-a[j][k]*t); for(int k=i;k<=n;k++) std::swap(a[i][k],a[j][k]); ret=-ret; } if(!a[i][i]) return 0; ret=ret*a[i][i]; } return ret<0?-ret:ret; } inline void work() { memset
(C,0,sizeof(C)); memset(d,0,sizeof(d)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); C[u][v]=-1; C[v][u]=-1; d[u]++,d[v]++; } for(int i=1;i<=n;i++) C[i][i]=d[i]; printf("%lld\n",Matrix_Tree(C)); } int main() { int t; scanf("%d",&t); while(t--) work(); return 0; }

相關推薦

[模板] 矩陣定理

題目描述: 給一個無向圖,求圖上生成樹的數量. 題目分析: 矩陣樹定理就是用於解決圖上的生成樹的計數問題的. 先構造兩個矩陣 A為鄰接矩陣 若 u v 有邊 A[u][v]++ A[v]

模板矩陣定理

對了有一道假題目 解析: 先明確幾個定義。 對於一個圖GGG,定義其度數矩陣為D[G]D[G]D[G],為一個n∗nn*nn∗n的矩陣,滿足當i!=ji!=ji!=j的時候,di,j=0d_{i,j

【BZOJ2467】[中山市選2010]生成樹 矩陣定理

n) 生成樹 scan ans 中山市選 work font 以及 pri 【BZOJ2467】[中山市選2010]生成樹 Description 有一種圖形叫做五角形圈。一個五角形圈的中心有1個由n個頂點和n條邊組成的圈。在中心的這個n邊圈的每一條邊同時也是某一個

SPOJ - HIGH Highways(矩陣定理

color mat space ostream pac com print con nbsp https://vjudge.net/problem/SPOJ-HIGH 題意: 給n個點m條邊,求生成樹個數。 思路: 矩陣樹裸題。 具體的話可以看一下周冬的論文

CSU 1805 Three Capitals(矩陣定理+Best定理

mod std div air vector 一定的 選擇 cstring type http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1805 題意: A和B之間有a條邊,A和G之間有b條邊,B和G之間有c條邊。現在

走進矩陣定理--「CodePlus 2017 12 月賽」白金元首與獨舞

生成樹 isp 多余 矩陣樹定理 遇到 每次 ans ace 指向 n,m<=200,n*m的方陣,有ULRD表示在這個格子時下一步要走到哪裏,有一些待決策的格子用.表示,可以填ULRD任意一個,問有多少種填法使得從每個格子出發都能走出這個方陣,答案取模。保證未確定的

【bzoj5133】[CodePlus2017年12月]白金元首與獨舞 並查集+矩陣定理

oid lin 因此 algorithm fault str typedef 12月 zoj 題目描述 給定一個 $n\times m$ 的方格圖,每個格子有 ↑、↓、←、→,表示從該格子能夠走到相鄰的哪個格子。有一些格子是空著的,

矩陣定理(Matrix Tree)學習筆記

cstring 相關 () str eof bsp lld open csdn 如果不談證明,稍微有點線代基礎的人都可以在兩分鐘內學完所有相關內容。。 行列式隨便找本線代書看一下基本性質就好了。 學習資源: https://www.cnblogs.com/candy99/p

[洛谷U22156]未曾屆到遊覽(矩陣定理

() cto getc 時間 成了 getchar ret -m 代碼 題目背景 又到了某任*堂開關中學一年一度的自主招生考試的時間了,在考試完後許多家長決定帶著自己的孩子參觀一下這所距千年名校還有890周年的百年學校; 題目描述 這所學校的布局非

BZOJ3534 [Sdoi2014]重建 【矩陣定理

urn %d iostream 位數 == != swap IT 接下來 題目 T國有N個城市,用若幹雙向道路連接。一對城市之間至多存在一條道路。 在一次洪水之後,一些道路受損無法通行。雖然已經有人開始調查道路的損毀情況,但直到現在幾乎沒有消息傳回。 辛運的是,此前T國政府

BZOJ4894 天賦 【矩陣定理

.com space sizeof make spa long long HR define AI 題目鏈接 BZOJ4894 題解 雙倍經驗P5297 題解 #include<iostream> #include<cstring> #include

bzoj4031 [HEOI2015]小Z的房間——矩陣定理

add space TP problem 模板題 names .com def CA 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=4031 矩陣樹定理的模板題(第一次的矩陣樹定理~); 有點細節,放在註釋裏了。 代

[luogu3244 SHOI2016] 黑暗前的幻想鄉(容斥原理+矩陣定理)

getc ems href 建築 != dig algorithm bool mem 傳送門 Description 給出 n 個點和 n?1 種顏色,每種顏色有若幹條邊。求這張圖多少棵每種顏色的邊都出現過的生成樹,答案對 109+7 取模。 Input 第一行包含一個正整

luoguP3317 [SDOI2014]重建 變元矩陣定理 + 概率

htm ever turn name https 因此 mage for rac 首先,我們需要求的是 $$\sum\limits_{Tree} \prod\limits_{E \in Tree} E(u, v) \prod\limits_{E \notin T

矩陣定理

逆元 tro 其他 常數 sdn tps tree blog 鄰接 引用:https://blog.csdn.net/Marco_L_T/article/details/72888138 1、無向圖 一個圖的鄰接矩陣G:對於無向圖的邊(u,v),G[u][v]++,G[v]

[JZOJ5899]【NOIP2018模擬10.6】資源運輸【矩陣定理】【圖論】

Description 給定一個n個點,m條邊的帶權無向圖。 定義這個圖的一個生成樹的權值為生成樹上邊權的乘積。 求所有生成樹權值的平均值,答案對998244353取模。 2<=n<=300,n-1<=m<=1000 Solution 平均值=和/總數

bzoj1016(矩陣定理+MST)

這個可以邊做MST邊求生成樹的方案數,就是在加入相同邊權的時候統計各個聯通塊的生成樹方案數並縮成一點(因為不同MST方案數來自於取相同邊權的邊),然後把他們都乘起來就是了。。 然後寫起來比較噁心就是了。。     /* *        ┏┓    ┏┓

bzoj1002(矩陣定理+高精度)

矩陣樹定理裸題。。然而高精度真的不想寫丫。。。於是換了python。。 發現vim寫python太危險了。。各種縮排問題交上去隨手CE。。     n=int(input()); a=[[0]*105 for i in range(105)]; if n<

spoj HIGH(矩陣定理)

題意:給定無向圖的邊,求構成生成樹的方案數 這個是個結論,在鄰接矩陣的基礎上將a[i][i]定義為i的度數的相反數,然後對這個矩陣求n-1階子式就可以了。。證明網上一堆,比較長。。 順便get行列式計算姿勢。。     /* *        ┏┓  

bzoj3534(矩陣定理)

這個題目還是有點意思。。 莽了一發過不去樣例發現是因為沒有考慮非樹邊的概率,所以實際要求的應該是 然後要轉化一下成為T上點的乘積,就變成了 然後用pi/(1-pi)構造基爾霍夫矩陣就可以了。。 然而有pi==1感覺沒辦法解決啊qaq網友說直接減個eps就好了(窩怎麼這