【算法学习】网络流模型与套路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengwill97/article/details/82765383

网络流模型

最大权闭合子图

定义:图中每个点有点权,或正或负。在选择一个点后,必须选择某些后继点。一般情况求最大的收益。

求解:对于点权为正的点(一般为收益),源点 S S 向正权点连边,容量为点的权值。对于点权为负的点(一般为花费),向汇点 T T 连边,容量为负权绝对值。对于要选择后继关系的点,前驱点向后继点连边,容量为 i n f inf 。跑最大流,求出最小割。最终答案 = 正权点之和 - 最小割。

解的输出:看跑完最大流后的 v i s i t visit 数组,若为 T r u e True 则表明选择,反之表明不选择。

二分图最大匹配

定义:给出二分图,边代表可能的匹配关系。求出最大的匹配数目。

求解:建立源点 S S 和汇点 T T ,源点 S S 向左点集连边,容量为1,右集合向汇点 T T 连边,容量为1。若左集合中某点 v l v_l 与右集合某点 v r v_r 有连边,则 v l v_l v r v_r 连边,容量为1。跑最大流,最大流即为最大匹配数目。

解的输出:根据跑完最大流后的结果。依次看左集合每个点向右集合边的流量,若为1,表明选中这条边对应的匹配关机,反之不选择。

二分图的最小点覆盖

二分图的最小点覆盖有两种,一种点权全部为1(朴素情况),一种是各个点带不同点权(推广情况)。

朴素二分图最小点覆盖

定义:给出一张二分图,选出最小的点集 V V ,使得每一条边至少有一个顶点在 V V 中。

求解:二分图的最小点覆盖数目 = 二分图的最大匹配数目

二分图最小点权覆盖

定义:给出一张二分图,选出点集 V V ,使得每一条边至少有一个顶点在 V V 中,并且点集权值 i = 1 V v i \sum_{i=1}^{|V|}v_i 最小。

求解:建立源点 S S​ 和汇点 T T​ ,源点 S S​ 向左点集每一点连边,容量为点权值,右点集每一点向汇点 T T​ 连边,容量为点权值。对于二分图内部的边,如 v l v_l​ v r v_r​ 的边,连边,并且容量为 i n f inf​ (使得此边不在最小割中)。跑最大流,求出最小割,即为最下点权覆盖权值。

扫描二维码关注公众号,回复: 3306084 查看本文章

二分图的最大独立集

二分图的最大独立集分两种,一种点权全部为1(朴素情况),一种是各个点带不同点权(推广情况)。

朴素二分图的最大独立集

定义:给出一张二分图,选出最大的点集 V V ,使得点集 V V 中没有任意两点有边相连。

求解:二分图的最大独立集 = 顶点数 - 最小点覆盖

二分图的最大点权独立集

定义:给出一张二分图,选出点集 V V ,使得点集 V V 中没有任意两点有边相连,并且 i = 1 V v i \sum_{i=1}^{|V|}v_i 最大。

求解:最大点权独立集权值 = 总点权 - 最小点权覆盖权值

有向图最小路径覆盖

有向图最小路径覆盖有两种,分别为最小不相交路径覆盖最小可相交路径覆盖

最小不相交路径覆盖

定义:给出 D A G DAG ,求出最小的有向路径条数,记为 P = { P 1 , P 2 P n } P = \{P_1,P_2 \dots P_n\} ,若 D A G DAG 中每个顶点都恰好在 P P 的一条道路上,那么 P P 则为此 D A G DAG 的最小路径覆盖。注意单个点也可以是一条覆盖路径。

求解:最小路径覆盖数目 = 顶点数 - 最大匹配数目
将每个点 v i v_i 拆分为 v i v i v_i、v_i' 。令 v i v_i 为二分图左集合, v i v_i' 为二分图右集合。源点 S S 连左集合 v i v_i ,容量为1,汇点连右集合 v i v_i' ,容量为1。若原图有 v i v_i v j v_j 的有向边,则连边 v i v_i v j v_j' ,容量为1。跑最大流,得到最大匹配数目,进而得到最小路径覆盖数目。

解的输出:输出解需要理解左右集合的含义。若右集合中的点 v i v_i' 在最大流中有边指向,表示最小路径覆盖中有路径以 v i v_i 结尾;又因为 D A G DAG 中每个点都在路径覆盖中,所以右集合中没有被指向的顶点一定为最小路径覆盖的起始点。据此可以找到所有覆盖路径的起点。
找到起点后,依次枚举每一个点 v i v_i' ,找到其左集合对应顶点 v i v_i ,根据最大流中的关系,找到有流量的右集合中的点 v j v_j' ,再转到 v j v_j 根据流量关系寻找顶点,知道左集合不存在有流量的出边,表示找完一条覆盖路径。

在这里插入图片描述

如图,从B集合的1找到3,再从3找到4,在从4找到6,因为A中的6不存在有流量的边指出到B集合,故1-3-4-6是其中一条覆盖路径。

最小相交路径覆盖

待填坑

猜你喜欢

转载自blog.csdn.net/pengwill97/article/details/82765383