用 Tutte 矩阵求一般图最大权匹配
在本文中,我们会解决以下问题:
给定包含 \(N\) 个点和 \(M\) 条边的图,需要求出:
- 最大权匹配;
- 所有最大权匹配方案的边的并集。
\(1\le N\le 200\),\(1\le M\le \frac{N(N-1)}{2}\)。
对于一个 \(N\times N\) 的矩阵 \(A\),其逆矩阵 \(A^{-1}\) 与伴随矩阵 \(\text{adj}(A)\) 满足以下关系:
Cramer 法则
\[ A^{-1} = \frac{\text{adj}(A)}{\det(A)} \]
也就是说:
其中 \(M_{u,v}\) 是 \(A\) 去掉第 \(u\) 行和第 \(v\) 列得到的余子式。
对于一张图 \(G(V,E)\),我们定义它的 Tutte 矩阵 \(A(G)\) 满足:
其中 \(x_{i,j}\) 是一个变量。
以下简记 \(A(G)\) 为 \(A\)。
我们可以知道:
- \(\det(A)\) 描述了图 \(G\) 中所有完美匹配的带符号和。
- \(M_{u,v}\) 描述了图 \(G\) 去掉节点 \(u,v\) 后的所有完美匹配的带符号和。
- \(A_{u,v}\) 是 \(u\) 和 \(v\) 之间的权重和系数。
同时,我们不加证明的给出:
Tutte 定理
图 \(G\) 存在完美匹配当且仅当 \(\det(A)\ne0\)。
接下来,让我们考察:
其中,\(M_{u,v} \cdot A_{u,v}\) 表示“强制选中 \((u,v)\),剩余边构成的完美匹配”的方案总和。
如果这个值不是零,就说明存在一个完美匹配的方案包含 \((u,v)\) 这条边。
考虑如何找到边权和最大的完美匹配。
对于矩阵中的每一个变量 \(x_{i,j}\),我们将其替换为 \(y^{w_{i,j}}\),\(y\) 同样是一个对应的变量,\(w_{i,j}\) 是边权。
现在,矩阵 \(A(y)\) 的行列式变为了关于 \(y\) 的多项式。
在 \(\det{A(y)}\) 这个多项式中,其最高项指数是最大权完美匹配权重的 \(2\) 倍。
我们定义 \(A_{i,j}=r_{i,j}\cdot y^{w_{i,j}}\)。
同时,我们定义一种关于 \((d,v)\) 的运算来模拟多项式,并且只保留最高次项。其中 \(d\) 是指数,\(v\) 是 \(r_{i,j}\) 经过若干运算得到的。
这个运算的乘法和加法定义如下:
求出 \(\det(A)\) 的最高次项 \((D,V)\),\(\frac{D}{2}\) 就是最大权完美匹配的权重。
如果一条边 \(e=(u,v)\)(权重为 \(w\))在某个最大权完美匹配中,当且仅当
由 Cramer 法则,我们知道 \(A\) 的逆矩阵元素 \((A^{-1})_{v,u}\) 的次数就是:
也就是说,在逆矩阵中,其储存了“除去边 \((u,v)\) 的图权重”相对于“原图权重”的差值。
对于一条权重为 \(w\),随机系数为 \(r\) 的边 \((u,v)\)。令 \(\text{chk}_{u,v}=(A^{-1})_{u,v}\times (w,r)\)。
如果 \(\text{deg}(\text{chk}_{u,v})=0\) 且 \(\text{val}(\text{chk}_{u,v})\ne 0\) 则说明边 \((u,v)\) 在某个最大权完美匹配中。
以上算法的时间复杂度为 \(O(n^3)\),瓶颈在于求出逆矩阵。
但是原问题是求出最大权匹配而非最大权完美匹配。
所以,我们需要允许一个点不被匹配。具体的,对于每个点 \(i\),我们建立虚点 \(i^\prime\),我们建立两种权重为 \(0\) 的边 \((i,i^\prime)\) 和 \((i^\prime,j^\prime)\)(\(i^\prime\ne j^\prime\))。
这样就可以将最大权完美匹配转化为最大权匹配。

浙公网安备 33010602011771号