這也是乙個黑科技
設乙個無向圖的鄰接矩陣為$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...