关于网络流最小割的一些小知识
1.输出任意一种最小割的方案:
在运行完网络流算法之后,在残量网络上,s和t之间不连通了
进行一边dfs/bfs,求出从s出发能到达的点集S,和不能到达的点集T
我们割掉了一组边,把原图划分成了S和T两个点集
所有从S跨越到T的满流边构成了一个最小割方案
2.判断一条边是否满流:
运行一次最大流算法,得到一个残量网络
取残量网络上的一条满流边(u, v),判断这条边是否一定满流
对残量网络运行Tarjan算法,求出所有SCC
当u和v不属于同一个SCC的时候,这条边一定满流
否则,我们可以在SCC中找到一个包含这条边的反向边的环,沿着环增广一次,仍然不破坏流量平衡,但是这条边已经不满流了
3.判断某一条边是否可能为最小割中的一条
所有一定满流的边都可能为最小割
4.判断某条边是否一定出现在最小割中
首先还是对残量网络求SCC
考虑一条满流边(u, v),判断她是否一定出现在最小割中
当u和s属于同一个SCC,并且v和t属于同一个SCC的时候,这条边一定出现在最小割中
5.输出在最小割的最小边数
设总边数为m,所有的边权都乘m+1然后再+1
用这个新的图跑最大流然后结果/(m+1)就是最小割
结果%(m+1)就是最小边数