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})\)。
简单应用
关于 Tutte
矩阵求最大匹配的做法,因为其实际运行效率比带花树慢很多,而且我也不太会证明,就不写了。