Algorithm 如何将最大基数二部匹配减少到最小路径覆盖?

Algorithm 如何将最大基数二部匹配减少到最小路径覆盖?,algorithm,network-flow,Algorithm,Network Flow,我读过这两个问题: 还有这个 但我不明白如何解决最大匹配问题可以用来解决最小路径覆盖。我知道解决方案是N-M,其中n是G中的顶点数,m是最大匹配,但我找不到原因< p>这里是对这个事实的直观解释(这不是严格的证明):让我们来看看路径覆盖中的每个路径。除路径中的第一个顶点外,每个顶点都有一个唯一的前置顶点。此外,每个顶点只有一个后续顶点(每个路径中的最后一个除外)。这就是为什么我们可以说每个顶点都与其前一个顶点相匹配。如果顶点与任何对象都不匹配,则它是某条路径中的第一个顶点。这就是为什么路径的数

我读过这两个问题:

还有这个


但我不明白如何解决最大匹配问题可以用来解决最小路径覆盖。我知道解决方案是N-M,其中n是G中的顶点数,m是最大匹配,但我找不到原因

< p>这里是对这个事实的直观解释(这不是严格的证明):让我们来看看路径覆盖中的每个路径。除路径中的第一个顶点外,每个顶点都有一个唯一的前置顶点。此外,每个顶点只有一个后续顶点(每个路径中的最后一个除外)。这就是为什么我们可以说每个顶点都与其前一个顶点相匹配。如果顶点与任何对象都不匹配,则它是某条路径中的第一个顶点。这就是为什么路径的数量等于不匹配顶点的数量(每个路径正好有一个第一个顶点)。不匹配顶点的数量显然等于顶点总数减去匹配顶点的数量。这就是我们得到的
n-m
公式。不可能获得比最大匹配大小更小的路径(否则
n-m1
=>
m1>m
=>
m
不是最大值)。同时,我们可以显式地构造具有
n-m
路径的解

  • 左侧有n个节点,右侧有m个节点
  • 匹配后,计算maxFlow f-最大匹配数
  • 左侧的f节点和右侧的f节点已在最小边覆盖中
  • 在左边有n-f个不匹配的节点,在右边有m-f个这样的节点
  • 这些节点还不在最小覆盖范围内,因为最大匹配不包括它们
  • 每个节点都可以连接到min edge cover。所以它添加了(n-f)+(m-f)边
  • 所以总的最小覆盖率是f+(n-f)+(m-f)=n+m-f
这里有一个最小边覆盖问题: