无向图网络流
建图时直接把反向边的出事容量设为与正向边相同即可。
最大权闭合子图
选出一个点集,使得它们的后继节点都在这个点集中,使这个点集尽可能地大。
解法:
源点向点权>=0的点连边,容量=点权。
源点向点权<0的点连边,容量=abs(点权)。
点权>=0的点向点权<=0的点连边,容量=inf。
ans=正点权之和-最小割。
思维过程:
先把所有点权>=0的点取上,去从中删除一些不优的。
一个点权>=0的点如果要取,那么必然所有和他相连的点权<=0的点都必须取。
把这个强制要取的过程转化成在网络图上强制他们不连通,必须要把<=0的点给割掉,割掉的代价就是这个负点权。
如果这个点权>=0的点不取,那么就在网络图上体现为把它割掉,不去影响与它相连的负点权的取舍,割掉后总收益减少量就是它的点权。
综上,由于我们显然要最小化这个减去的代价,所以可以用最小割来求解。
https://blog.csdn.net/qq_43202683/article/details/90049597
最小路径覆盖
做法:
首先将每个节点拆成(Xi,Yi)两个节点,建立源点和汇点,分别连接(S,Xi)和(Yi,T)。
然后对于每一条原图中的边,建立边(Xi,Yi)即可。
ans=总点数-最大流
思维过程:
我们首先将原图用n条路径覆盖,每条边只经过每个节点。
现在尽量合并更多的路径(即将两个路径通过一条边首尾相连)。
可以知道,每合并两条路径,图中的路径覆盖数就会减少1。
所以我们只需要利用网络流合并相关的路径即可。