生成树系列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}!}\)