生成树系列MatrixTree,Best定理算法流程

生成树系列Matrix-Tree,Best定理算法流程

前置知识:矩阵行列式

Matrix-Tree定理

对于一个无向图,构造矩阵\(A\)满足

\[A_{i,j}=\left\{ \begin{aligned} deg_i, && i=j \\ -1 && i和j联通 \\ 0 \end{aligned} \right. \]

同时去掉任意\(i\)行和\(i\)列, 答案就是\(|A'|\),还可以推广到有重边的图,\(G\)是邻接矩阵(忽略所有自环)

\[A_{i,j}=\left\{ \begin{aligned} deg_i, && i=j \\ -G_{i,j} && i\ne j\end{aligned} \right. \]

还可以推广到带边权的图,计算所有生成树边权乘积之和,方法类似

如果是有向图,点\(S\)为根,则构造类似的矩阵之后去掉第\(S\)行和第\(S\)列即可

Best定理:欧拉回路计数

从起点\(S\)出发不重复地遍历所有的有向边

统计每个点的入度和出度\(indeg_i,outdeg_i\),必然有\(indeg_i=outdeg_i\)

答案就是生成树方案\(\cdot \Pi(indeg_i-1)!\)

如果是求遍历序列个数,还要考虑\(S\)不同断点的重复,还要再乘上\(indeg_S\)

如果认为每条边是一样的,则还要除去\({\Pi G_{i,j}!}\)

原文地址:https://www.cnblogs.com/chasedeath/p/12716002.html