Java教程

感性理解矩阵树定理

本文主要是介绍感性理解矩阵树定理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

\(~\)
  做 P4455 [CQOI2018]社交网络 的时候,因为没看出外向树直接发呆了,然后发现不太会证明矩阵树定理,其实 zhouxj 讲过,但是因为太复杂了,以及考场现推的几率很小,于是默认跳过这个证明了,但是刚好发现了 比较简洁的证明,于是加了点自己的理解就有这篇感性理解文章。

  如果想学习理性证明,推荐看 基尔霍夫定理_VFleaKing 的博客-CSDN 博客,博主只会感性理解。

  博主写本文的时候可能会太困而脑抽,于是如果有些地方写错了,欢迎与我联系。

无向图的矩阵树定理

结论 1

考虑排列 \(P = (p_1, p_2, \dots p_n)\),那么考虑将 \((1, 2, \dots, n)\) 每次交换两个数,最后生成 \(P\),显然所有交换方案的次数在 \(\bmod ~2\) 意义下都是一样的,同时和逆序对奇偶性相同。

结论 2

如果 \(P\) 写成置换环形式,整个图成了一个大环,那么所有交换方案的次数和环长 - 1 相同。

  考虑最小交换次数即可。

结论 3

对于一个排列 \(P = (p_1, p_2, \dots, p_n)\),新建一个有向图,其中 \(i\) 向 \(p_i\) 连边,那么整个图的环的个数的奇偶性和 $n - $ 逆序对个数的奇偶性相同。

  求和即可。


  接下来,我们考虑无向图的生成树可以怎么算。

  注意每个节点的父亲是唯一的,于是我们可以先钦定一个根,然后每个节点选一条边确定一个父亲,但是会有形成环的出现,于是我们可以考虑容斥,钦定若干节点会形成环,其他节点可以乱选,将最后的方案乘上 \((-1)^{环个数}\) 即可。

  看到 \((-1)^{环个数}\),我们可以想到行列式,首先我们写下整个图的邻接矩阵(注意此时在矩阵中 \(mat_{i, i} = 0\)),钦定一个根,删去有关的行和列,然后就可以求一下行列式,就给每个点确定父亲了,因为行列式自带 \((-1)^{逆序对}\) 的系数,那么我们可以将整个邻接矩阵的所有系数取反,于是就是 \((-1)^{n - 逆序对}\) 的系数了,也就是 \((-1)^{环个数}\) 了。

  于是我们已经实现了钦定所有的点都必须被环包含的情况。

  现在,我们还要钦定若干节点乱选,于是我们可以将矩阵的对角线赋值上其度数,然后就是乱选了。

  于是就是矩阵树定理的形式了。同时可以发现矩阵树定理的本质就是对环进行容斥

有向图拓展

  上面进一步可以拓展到有向图上面,同时也可以方便感性理解背诵外向树生成树矩阵树定理是入度矩阵。

  以外向树为例:

  • 类似无向树的情况,先删掉钦定根的有关行列,代表该点不选父亲
  • 对于其他点,每个点的父亲必须是它的入边,于是就是保留入度矩阵了。

  进而我们可以感性理解了外向树矩阵树定理用的是入度矩阵了。

进一步拓展

如果我们要求的是无向图的生成森林呢?

  有两种办法:

  • 新建一个点 \(n+1\),然后每个点向 \(n+1\) 连边,最后钦定 \(n+1\) 为根,删去有关行列就行了。最后的写法就是将整个矩阵全部保留,唯一地更改就是每个点的入度突然 \(+1\)。
  • 不新建点,采用感性理解这个方法,就是每个点的入度 \(+1\),代表乱选的方案 \(+1\),然后还是钦定 \(n\) 为根,删去有关行列。最后写法就是正常的矩阵树定理(删了一个点),但是每个点的入度突然 \(+1\)。

  于是我们惊喜地发现,两个写法唯一的不同就是删了一个点有关行列还是没删(,但是好像都是对的(

  才不会告诉你是写最小生成树计数的时候惊喜地发现的一个地方

  可能是数据水了导致都 AC 了,如果有问题欢迎练习博主。

这篇关于感性理解矩阵树定理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!