[模板] 二分图/网络流相关定义/定理/算法

定义

二分图是图论的一种特殊模型. 若 \(G=<V, E>\) 是一个无向图, 如果顶点V可分割为两个不相交的子集 \((X, Y)\), 且图中的每条边 \((i, j)\)均满足\(i \ in X, j \in Y\), 则称图\(G\)为一个二分图。

二分图判定

  • 无向图 \(G=<V, E>\) 为二分图的充要条件是G的所有回路的长度均为偶数。
    反证法/染色法易证

一些概念

记一般图 \(G=(V,E)\).

  • 匹配: 在图G的一个子图M中,M的边集E中任意两条边都不依附于同一个顶点, 则称M是一个匹配.

    • 匹配点: 匹配边上的点
    • 匹配数: 匹配 \(M\) 的边集 \(E\) 的大小
    • 对于一个匹配\(M=(V', E')\), \(2|E'| = |V'|\)
  • 极大匹配(Maximal Matching): 指匹配 \(M\)无法通过增加未匹配的边的方式来增加匹配的边数.

  • 最大匹配(Maximum Matching): 所有极大匹配当中边数最大的一个匹配.

  • 完美匹配(完备匹配):一个图中所有的顶点都是匹配点的匹配, 即 \(2|M| = |V|\).

    • 完美匹配一定是最大匹配, 但并非每个图都存在完美匹配.
  • 最优匹配(带权最大匹配): 在带有权值边的图中,匹配边上的权值和最大的匹配.

    • 二分图中, 一般X和Y集合顶点个数相同, 最优匹配也是一个完备匹配. 如果个数不相等, 可以通过补点加0边来转化.
    • 一般使用KM算法解决该问题. KM(Kuhn and Munkres) 算法, 是对匈牙利算法的一种贪心扩展.
  • 最小覆盖: 最小覆盖分为最小顶点覆盖和最小路径覆盖.

    • 最小顶点覆盖: 指求最少的顶点数, 使得图中的每条边都至少与其中一个点相连.
    • 最小路径覆盖: 指求最少的不相交简单路径覆盖图中的所有顶点.
  • 最大独立集: 寻找最大的点集, 使得其中任意两点在图中无对应边.

    • 最大独立集 = 补图最大团 (反之亦然)
    • 一般图求最大独立集为 NP-Complete 问题, 但在二分图中有多项式解法.

定理 & 算法

最大流最小割定理

网络 \(G=(V,E)\) 的最大流 \(f_{max}\) = 最小割 \(C_{min}(S,T)\).

首先, \(f \le C(S,T)\). 利用反证法.

然后, 构造出一个 \(f = C(S,T)\):

定义 \(S\) 集合为当前残留网络中s能够到达的点, \(T=V-S\).
此时(S,T)构成一个割(S,T). 且对于任意的 \(u∈S,v∈T\), 有\(f(u,v)=c(u,v)\).
因此有 \(f(S,T)=\sum f(u,v)=\sum c(u,v)=C(S,T)\)

因此, \(f_{max} = C_{min}(S,T)\).

覆盖 & 匹配 & 独立集

在二分图中, 最大匹配=最小顶点覆盖=\(|V|\)-最小边覆盖=\(|V|\)-最大独立集.

证明

带权的覆盖 & 独立集

\(p\) 点权值为 \(v_p\).

对于二分图一侧的边, 连边 \((s,p,v_p)\); 另一侧的点, 连边 \((p,v,v_p)\).

那么最小割即为带权最小顶点覆盖. 这可以通过最大流求出.

类似上面的, 有 最大点权独立集=\(\sum v_i\)-最小点权覆盖.

一些定理

Hall 定理
集合 S_1,S_2,…,S_m ,每个集合都能选出唯一代表,当且仅当,|⋃_i∈IS_i|≥|I| for all I⊆{1,2,…,m}

这个充要条件 |⋃_i∈IS_i|≥|I| for all I⊆{1,2,…,m} 被称为 Hall's condition。

König-Egerváry 定理:二部图中,最大匹配的大小等于最小点覆盖集的大小。

Menger 定理:在图上分开两个点至少要去掉几个点?等于这两点间不相交的路径的个数。

Dilworth 定理:一个偏序集分成多少个 chain?等于最大 antichain 的大小。

最小路径(点)覆盖

最小点不相交路径覆盖

似乎只有DAG上的解法, 一般图上的并不会...

将原图中的点 \(p\) 拆成 \(p', p''\). 对于边 \((u, v)\), 在新图中连边 \((u', v'')\).

答案即为(原图点数 - 新图最大匹配).

最小点可相交路径覆盖

用floyd传递闭包, 如果 \(u\) 可以到达 \(v\), 加边 \((u, v)\).

然后就转化为了不相交路径覆盖, 解法同上.

最长反链

链指一个点集, 满足其中任意两点 \(u,v\), 或者能从 \(u\) 到达 \(v\), 或者能从 \(v\) 到达 \(u\).
反链指一个点集, 满足其中任意两点不可互相到达.

Dilworth定理: 最长反链 = 最小链覆盖.

同时, 链一定是路径的一部分. 因此最小链覆盖 = 最小可相交路径覆盖.

因此, 最长反链 = 最小链覆盖 = 最小可相交路径覆盖

算法见上.

圈覆盖

即求有向图有多少个点不相交的环, 覆盖图上所有点.

类似最小不相交路径覆盖建图, 跑二分图匹配.

有解的充要条件是二分图有完美匹配; 此时, 可以把得到的匹配看做一个置换, 置换的每个环都是一个圈.

最大权闭合子图

网络流——最小割求最大权闭合子图 - CaptainChen的博客 - CSDN博客

定义

在一个有向图中, 每个点都有一个权值 \(v_i\), 选择一个权值和最大的子图, 使得每个点的后继都在子图里面, 这个子图就叫最大权闭合子图.

求法

从源点 \(s\) 向每个正权点连一条容量为权值的边, 每个负权点向汇点 \(t\) 连一条容量为权值的绝对值的边, 有向图原来的边容量全部为无限大.

求它的最小割, 割掉后, 与源点s连通的点构成最大权闭合子图, 权值为 (正权值之和-最小割).

边/点连通度

图的匹配问题与最大流问题(四)——计算图的边连通度和点连通度 - smartxxyx的专栏 - CSDN博客

定义

\(G = (V, E)\) 的边连通度指边集 \(E\) 的一个最小子集 \(E'\) 的大小, 使得 \(G - (V, E')\) 或者是非连通图, 或者是一个平凡图(仅包含一个独立点的图).

\(G = (V, E)\) 的点连通度指点集 \(V\) 的一个最小子集 \(V'\) 的大小, 使得 \(G - (V', E)\) 或者是非连通图, 或者是一个平凡图(仅包含一个独立点的图).

求法

边连通度: 任选一点为源点, 枚举汇点求最小割, 最小值即为边连通度.

点连通度: 拆点建图: \((u', v'', +\infty)\), \((u', u'', 1)\). 任选 \(u''\) 为源点, 枚举 \(v'\) 为汇点, 求最小割即可.

最小割计数

假的

最小割计数 - 题目 - Universal Online Judge

UOJ #85 最小割计数 题解 - 博客 - PoPoQQQ的博客

参考资料

posted @ 2019-01-10 14:20  Ubospica  阅读(570)  评论(0编辑  收藏  举报