我正在从我的书中练习算法问题并遇到了这个问题:
您将获得一个有n个节点和m个边缘的定向网络G,一个源s,一个接收器t和一个从s到t的最大流量f。假设每个边的容量都是正整数,请描述一个O(m + n)时间算法,用于在以下两种情况中更新流f。
(i)边e的容量增加1。
(ii)边e的容量减少1。
看起来它就像走过网络流边缘和调整流程一样简单,但我不认为它真的那么简单。维基百科仅提供O(n ^ 2 m)或O(n m ^ 2)的算法。任何帮助或想法将不胜感激。
答案 0 :(得分:1)
有一个解决方案here。
假设e是u和v之间的边缘。
增加容量的想法是在残差流图中简单地对从s到t的路径进行DFS。
如果在最大流量中未使用边缘,则完成。
否则,我们的想法是在剩余流程图中查看是否存在从u到v的替代路径。这需要O(n + m)。如果找到,则可以将最大流量增加1。
否则,您需要减少流量。你可以通过找到从u到s的路径,流量可以沿着该路径增加1,以及从t到v的路径,流量可以沿着该路径增加1。 (增加的方向相反,因此减少了从s到t的流量)。