最小费用最大流
前置知识:\(SPFA\),网络流\(Dinic\)算法
有了网络流的基础 可以拓展到最小费用最大流了
与网络流不同 费用流中每一条边除了又一个流量\(f\)的限制,还有一个费用\(c\)(可理解为一单位流量的单价),我们要做的就是再找出最大流量的前提下,使得花费的费用最小
回顾网络流\(Dinic\)算法,我们会先对整张图进行\(bfs\)分层,然后根据分出来的层进行增广。那么我们类比一下费用流如何处理。因为要求费用最小,所以可以先将最短费用路跑出来,然后在最短路上进行增广,为什么正确呢?首先保证了最小费用,其次,当网络中还有能走到汇点的路径时还会继续增广,所以也满足了最大流(感性理解一下我不会证明)。
那么算法雏形已经确定了,即把\(Dinic\)算法中的\(bfs\)换成\(SPFA\)即可。
注意:
- 因为\(Dinic\)算法可以走回流,所以需要建反边,那么反边的费用就是原边的相反数了,这样,当经过反边时,就可以把原边对费用的贡献剪掉了
- 因为费用可能为\(0\), 所以处理最短路的时候可能出现环,因此不止要在\(SPFA\)中判断,还要再\(dfs\)中加一个判断不走重复点。在\(dfs\)中加一个判断也很好理解,流不会流向正在流的点

浙公网安备 33010602011771号