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