最小割边数:
求法一:
1.求出原网络的最大流.
2.把可能的关键割边(即满流的边)容量置为 1,其余边容量置为 0.
3.求出修改后网络的最大流.
此时的最大流即是最小割时最少的割边数。
总共求了 2 次最大流。
更好的求法二:
以下用 E 表示网络流中的边数.
1.建图时,把每条边的边权 w 置为 w * (E + 1) + 1.
2.求出修改后网络的最大流 flow_max.
此时原图的最大流为 flow_max / (E + 1) ,最少的割边数为 flow_max mod (E + 1). (E + 1 也可以换作一个大于等于它的任意数)
总共只求了 1 次最大流。
最小割边集:
在执行过 SAP 的残量网络上寻找满流的边(满流的边才可能是关键割边),即残量为 0 的边 。从原图,原图,原图中删去这条边,即将正向边残量置为 0,并执行一次 SAP 得到最大流。如果原最大流与此时得到最大流的差正好为该边容量,且此时得到的最小割边数正好比原最小割边数少 1 (求法见上文),则将该边加入最小割边集。重复这个过程,直到残量网络上所有满流边被讨论完毕。
【USACO4.4.2】Pollutant Control追查坏牛奶 就是一道考察这两个知识点的题目, NKOJ1852。
这道题困扰过我一段时间,代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 6 const long long int MAXN = 55000; 7 const long long int MAXM = 50005; 8 const long long int INF = ~0ull >> 1; 9 10 long long int

本文介绍了如何计算网络流中的最小割边数,提供了两种方法,包括通过最大流求解和优化算法。同时,阐述了最小割边集的查找过程,强调在网络的残量图中寻找满流边并执行SAP算法。这些理论知识在实际问题如USACO4.4.2的Pollutant Control和NKOJ1852等题目中有应用。
最低0.47元/天 解锁文章
57

被折叠的 条评论
为什么被折叠?



