网络流模型
最大权闭合子图
定义:图中每个点有点权,或正或负。在选择一个点后,必须选择某些后继点。一般情况求最大的收益。
求解:对于点权为正的点(一般为收益),源点 S S S向正权点连边,容量为点的权值。对于点权为负的点(一般为花费),向汇点 T T T连边,容量为负权绝对值。对于要选择后继关系的点,前驱点向后继点连边,容量为 i n f inf inf。跑最大流,求出最小割。最终答案 = 正权点之和 - 最小割。
解的输出:看跑完最大流后的 v i s i t visit visit数组,若为 T r u e True True则表明选择,反之表明不选择。
二分图最大匹配
定义:给出二分图,边代表可能的匹配关系。求出最大的匹配数目。
求解:建立源点 S S S和汇点 T T T,源点 S S S向左点集连边,容量为1,右集合向汇点 T T T连边,容量为1。若左集合中某点 v l v_l vl与右集合某点 v r v_r vr有连边,则 v l v_l vl向 v r v_r vr连边,容量为1。跑最大流,最大流即为最大匹配数目。
解的输出:根据跑完最大流后的结果。依次看左集合每个点向右集合边的流量,若为1,表明选中这条边对应的匹配关机,反之不选择。
二分图的最小点覆盖
二分图的最小点覆盖有两种,一种点权全部为1(朴素情况),一种是各个点带不同点权(推广情况)。
朴素二分图最小点覆盖
定义:给出一张二分图,选出最小的点集 V V V,使得每一条边至少有一个顶点在 V V V中。
求解:二分图的最小点覆盖数目 = 二分图的最大匹配数目
二分图最小点权覆盖
定义:给出一张二分图,选出点集 V V V,使得每一条边至少有一个顶点在 V V V中,并且点集权值 ∑ i = 1 ∣ V ∣ v i \sum_{i=1}^{|V|}v_i ∑i=1∣V∣vi最小。
求解:建立源点 S S S和汇点 T T T,源点 S S S向左点集每一点连边,容量为点权值,右点集每一点向汇点 T T T连边,容量为点权值。对于二分图内部的边,如 v l v_l vl向 v r v_r vr的边,连边,并且容量为 i n f inf inf(使得此边不在最小割中)。跑最大流,求出最小割,即为最下点权覆盖权值。
二分图的最大独立集
二分图的最大独立集分两种,一种点权全部为1(朴素情况),一种是各个点带不同点权(推广情况)。
朴素二分图的最大独立集
定义:给出一张二分图,选出最大的点集 V V V,使得点集 V V V中没有任意两点有边相连。
求解:二分图的最大独立集 = 顶点数 - 最小点覆盖
二分图的最大点权独立集
定义:给出一张二分图,选出点集 V V V,使得点集 V V V中没有任意两点有边相连,并且 ∑ i = 1 ∣ V ∣ v i \sum_{i=1}^{|V|}v_i ∑i=1∣V∣vi最大。
求解:最大点权独立集权值 = 总点权 - 最小点权覆盖权值
有向图最小路径覆盖
有向图最小路径覆盖有两种,分别为最小不相交路径覆盖和最小可相交路径覆盖。
最小不相交路径覆盖
定义:给出 D A G DAG DAG,求出最小的有向路径条数,记为 P = { P 1 , P 2 … P n } P = \{P_1,P_2 \dots P_n\} P={P1,P2…Pn},若 D A G DAG DAG中每个顶点都恰好在 P P P的一条道路上,那么 P P P则为此 D A G DAG DAG的最小路径覆盖。注意单个点也可以是一条覆盖路径。
求解:最小路径覆盖数目 = 顶点数 - 最大匹配数目
将每个点
v
i
v_i
vi拆分为
v
i
、
v
i
′
v_i、v_i'
vi、vi′。令
v
i
v_i
vi为二分图左集合,
v
i
′
v_i'
vi′为二分图右集合。源点
S
S
S连左集合
v
i
v_i
vi,容量为1,汇点连右集合
v
i
′
v_i'
vi′,容量为1。若原图有
v
i
v_i
vi到
v
j
v_j
vj的有向边,则连边
v
i
v_i
vi到
v
j
′
v_j'
vj′,容量为1。跑最大流,得到最大匹配数目,进而得到最小路径覆盖数目。
解的输出:输出解需要理解左右集合的含义。若右集合中的点
v
i
′
v_i'
vi′在最大流中有边指向,表示最小路径覆盖中有路径以
v
i
v_i
vi结尾;又因为
D
A
G
DAG
DAG中每个点都在路径覆盖中,所以右集合中没有被指向的顶点一定为最小路径覆盖的起始点。据此可以找到所有覆盖路径的起点。
找到起点后,依次枚举每一个点
v
i
′
v_i'
vi′,找到其左集合对应顶点
v
i
v_i
vi,根据最大流中的关系,找到有流量的右集合中的点
v
j
′
v_j'
vj′,再转到
v
j
v_j
vj根据流量关系寻找顶点,知道左集合不存在有流量的出边,表示找完一条覆盖路径。
如图,从B集合的1找到3,再从3找到4,在从4找到6,因为A中的6不存在有流量的边指出到B集合,故1-3-4-6是其中一条覆盖路径。
最小相交路径覆盖
待填坑