最大流3题
最大流的一个基本算法就是Ford-Fulkerson,基本的思路是:每次寻找一条增广路,记下增广路上最小的可改进量,并改进这条增广路,如此循环直到不存在增广路。
可以发现,Ford-Fulkerson有点浪费时间,SAP应用标号思想进行优化。另外对于单流增广,它必须找到一条完整的增广路之后再进行增广,如果存在一条岔路,那么它必须分作好几次才能做完。因此多流增广就有了:对于一个节点,在其可增广范围内对其相邻节点递归增广。
网络流的题目在构图的时候有个小技巧,原先需要使用剩余网络,必须有两张图存储。而实际应用中,只要每一条有向边都有一条跟它对应的反向边,且这两条边的流量值和等于容量限制即可。这样只要在一张图中存储即可,省去不少麻烦。自然,改进这条路的时候,将一条边上的流量+Delta,另一条边-Delta。
关于Ford-Fulkerson和SAP的基本思想可以参考附件的两个课件。下面贴出来几题最大流的题目,详细的Ford-Fulkerson和SAP实现见程序,可以参考注释。[PKU1273]Drainage Ditches
赤裸裸的网络流,下面的程序是Ford-Fulkerson算法。
Read on →