In: Computer Science
Given a graph G = (V,E), the source-sink pair (s,t) and capacity of edges {C_e ≥ 0 | e ∈ E}, design a polynomial-time algorithm to find a set of edges S, such that for every edge e ∈ S, increasing C_e will lead to an increase of max-flow value between s and t. Show the correctness of your algorithm.
Consider the Ford-Fulkerson algorithm, which creates residual graphs after sending some flow from s to t, and then stops when s and t become disconnected in the residual graph.
Hence, in the final residual graph, any path from s to t contains at least one edge which is being used for its full capacity.
Now, let the set of vertices which are reachable from s in the final residual graph be and the final set of vertices reacheable from t in the final residual graph be . Then any edge will be such that if the capacity of this edge is increased, then the max flow will increase as well.
To see why this is the case, let the capacity of such an edge be increased. Then the flow being sent across this edge is not using its full capacity anymore, hence this edge will connect s to t in the residual graph. This further implies that the residual graph allows another step of the Ford-Fulkerson algorithm, hence the flow can be increased by at least 1.
Thus, the algorithm simple outputs all edges between and , after running Ford-Fulkerson algorithm to find the maximum flow. The algorithm is correct as argue above.
The algorithm takes polynomial time as Ford-Fulkerson algorithm takes polynomial time. Then, finding can be done using any reachability algorithm, like Dijkstra's algorithm, which also runs in polynomial time. Then, the algorithm simply finds all edges between the two sets, which is easily doable in polynomial time.
Comment in case of any doubts.