矩陣樹定理學習筆記

2022-05-25 19:00:12 字數 2616 閱讀 4538

這也是乙個黑科技

設乙個無向圖的鄰接矩陣為$a$,度數矩陣為$d$,則基爾霍夫矩陣$k=d-a$的行列式的值就是生成樹的個數。

注意這裡的$k$是要把最後一行和最後一列去掉的。

(證明?不存在的)

它還有乙個擴充套件,叫做變元矩陣樹定理

若將鄰接矩陣的$a[i][j]$設為邊權,度數矩陣的$d[i][i]$設為與$i$相連的邊權的和,則這個值就是所有生成樹邊權之積的和。

這道題就是模板題,直接套定理就行。

1 #include2 #include3

#define rint register int

4using

namespace

std;

5 typedef long

long

ll;6

const

int n = 11, mod =1e9;

7int n, m, id[n][n], tot, f[n * n][n *n];

8char

str[n][n];

9 inline void add(int a, int

b)13 inline int

gauss()

24 res = (ll) res * f[i][i] %mod;

25 res = (res + mod) %mod;26}

27return (res + mod) %mod;28}

29int

main()

35for(rint i = 1;i <= tot;i ++)

36for(rint j = 1;j <= tot;j ++) f[i][j] = (f[i][j] + mod) %mod;

37for(rint i = 1;i <= n;i ++)

38for(rint j = 1;j <= m;j ++)

39if(str[i][j] == '.'

)43 printf("%d"

, gauss());

44 }

這道題就是要套乙個容斥原理。

都要選=可以都選-乙個不選+二個不選-三個不選...

然後列舉子集,重構一下矩陣就可以過了。

時間複雜度$o(2^nn^3)$

1 #include2 #include3 #include4

#define rint register int

5using

namespace

std;

6 typedef long

long

ll;7 typedef pairpii;

8const

int mod = 1e9 + 7;9

int n, f[18][18], ans, pre[1

<< 16

];10 vectorg[18

];11 inline void add(int a, int

b)15 inline int

gauss()

25 res = (ll) res * f[i][i] %mod;26}

27return (res + mod) %mod;28}

29int

main()39}

40for(rint i = 1;i < (1

<< n - 1);i ++) pre[i] = pre[i >> 1] + (i & 1

);41

for(rint i = 1;i < (1

<< n - 1);i ++)

53 printf("

%d\n

", ans);

54 }

這道題就要稍微推一下柿子了

$$\sum_\prod_p_*\prod_(1-p_)$$

$$=\prod_(1-p_)*\sum_\prod_\frac}}$$

前一部分預處理,後一部分直接算。

1 #include2 #include3 #include4

#define rint register int

5using

namespace

std;

6const

int n = 51;7

const

double eps = 1e-8;8

intn;

9double p[n][n], f[n][n], ans = 1

;10 inline void add(int a, int b, double

c)14 inline double

gauss()

22for(rint j = i + 1;j < n;j ++)

26 res *=f[i][i];27}

28return

res;29}

30int

main()41}

42 printf("

%.6lf

", ans *gauss());

43 }

【todo】

矩陣樹定理學習筆記

pn 其中p為1 n的任意乙個排列,p 表示排列p逆序對數 形象的表示就是 在這個n 3的矩陣中,每一條線就代表著d1 p1 d2,p 2 d3 p3 dn,p n d1,p1 d 2,p2 d3,p3 d n,pn 其中可以發現,相連的斜線為 就會讓逆序對數 1,就不增加 具體怎麼算呢?比如說上圖...

矩陣樹定理學習筆記

對矩陣 a begina a a dots a a a a cdots a vdots vdots vdots ddots vdots a a a dots a a a a dots a end 它的行列式定義為 det a sum 1 ra a cdots a 其中 p 是 1 sim n 的排列...

矩陣樹定理學習筆記

本篇部落格僅針對定理的應用 實現進行總結,至於證明 前人之述備矣 所以這裡就不贅述了。我絕對不會告訴你,是因為博主又笨又懶不會證!kirchhoff 矩陣樹定理 簡稱矩陣樹定理 用於解決一張圖的生成樹個數計數問題。對於 個 向圖 g 它的 成樹個數等於其基爾霍夫 kirchhoff 矩陣任何 個 n...