最小割的可行边与必须边
最小割的可行边:被某一种最小割方案包含的边。
充要条件:
1.满流。
2.在残余网络中找不到入点到出点的路径。
若不满流显然可以找到另一条更小的满流的限制流量的边。
若满流但在残余网络中能找到入点到出点的路径,那么需要同时割掉这条边和残余网络中路径上某条边才能实现“割”,而这两条边上的流量和一定等于其他某条或某几条满流的边的流量和,否则可以继续增广,又因为位于残余网络上的那条边一定不满流,所以这种割法不是最小割。
求法:
在残余网络中tarjan求SCC,入出两点在同一SCC中说明残余网络中存在入点到出点的路径。
由于该边满流,它的反向边一定存在于残余网络中,反向边与其他入点到出点的路径会构成SCC。
最小割的必须边(不考虑容量为0的边):一定在最小割中的边。
充要条件:
1.满流。
2.残余网络中源点能到入点,出点能到汇点。
若不满流显然可以找到另一条更小的满流的限制流量的边。
若满流但在残余网络中源点不能到入点或出点不能到汇点,那么在每条单独路径上一定都存在一条满足最小割可行边的边(容量为0阻断路径且没有其他路径),割掉这条可行边是等价的。
必须边的另一种理解是扩大容量后能增大最大流的边。
求法:
在残余网络上从源点开始dfs,从汇点开始反向dfs,标记到达的点,然后枚举满流边判断即可。
若求过可行边,已经有了SCC,直接判断入点是否与源点在同一SCC中且出点是否与汇点在同一SCC中即可。
考虑为什么两种算法是等价的,由于源点到入点一定有流,所以一定存在入点到源点的有流路径,等价得证。
另:二分图的可行边和必须边求法。
如果存在一组完备匹配:
求出一组完备匹配。
建一张新图:
对于图上的边,若为匹配边出点向入点连边,否者入点向出点连边。
在新图上tarjan求SCC。
可行边:此边为匹配边或入出点在同一SCC中。
必须边:此边为匹配边且入出点不在同一SCC中。
如果不一定存在完备匹配:
求出一组最大匹配。
建一张新图:
对于图上的边,若为匹配边出点向入点连边,否者入点向出点连边。
加入两个点S,T。
对于匹配的左部点u,u到S连边;右部点v,T到v连边。
对于未匹配点的左部点u,S到u连边;右部点v,v到T连边。
在新图上tarjan求SCC。
可行边:此边为匹配边或入出点在同一SCC中。
必须边:此边为匹配边且入出点不在同一SCC中。
二分图与最小割的做法本质是一样的,上述做法其实是利用二分图的性质较为简便地建出了残余网络而已。