Tutte矩阵(一般图的匹配问题)

定义

Tutte矩阵可以用来求一般图的完美匹配、最大匹配是否存在、方案以及方案数,而且比起带花树,Tutte矩阵更加好记,代码上也更加简洁。

对于一张图 \(G\),我们定义它的Tutte矩阵 \(A(G)\) ,满足:

\[A_{i,j}= \left\{\begin{matrix} x_{i,j} , (i,j) \in G \and i>j \\ -x_{i,j} , (i,j) \in G \and i<j \\ 0 , (i,j) \not \in G\\ \end{matrix}\right. \]

判断完美匹配

  • 对于图 \(G\) 存在完美匹配,当且仅当 \(\det A\not = 0\)

简单证明:

考虑到用偶环来覆盖图 \(G\) ,那么对于每个偶环,间隔地删边,刚好就是一个完美覆盖。

同样的,反过来对一个完美覆盖加边,也能构成一个偶环。

所以 \(G\) 存在完美覆盖等价于存在一个偶环覆盖。

一个环覆盖实际上就是一个排列,那么可以发现对应到矩阵上就是行列式。

然后就可以发现,\(A\) 的行列式恰好就是在枚举所有可能的圆覆盖,且所有有奇环的方案都被抵消掉了。

考虑对于一个环,我们把所有边反向在Tutte矩阵上就是从 \(x_{i,j}\) 变成了 \(-x_{i,j}\)

偶环奇偶性不变,而奇环恰好一正一负,抵消了。

所以 \(\det A\) 只要不为 \(0\) 就意味着存在至少一组偶环覆盖。

但是注意到, \(x\) 是个变量,如果直接暴力记录系数是指数的。

我们只需要知道其是否恒为 \(0\),因此只需要随机赋值其为 \([0,n^2]\) 级别的数即可,每一次判断的错误率是 \(O(\frac{1}{n})\)

简单应用

ZOJ3316 Game

关于 Tutte 矩阵求最大匹配的做法,因为其实际运行效率比带花树慢很多,而且我也不太会证明,就不写了。

posted @ 2021-08-23 12:56  krimson  阅读(440)  评论(0编辑  收藏  举报