A variation of this problem is to find a flow which is maximum, but has the lowest cost among the maximum flow solutions. This could be called a minimum-cost maximum-flow problem and is useful for finding minimum cost maximum
matchings. With some solutions, finding the minimum cost maximum flow instead is straightforward. If not, one can find the maximum flow by performing a
binary search on d. A related problem is the
minimum cost circulation problem, which can be used for solving minimum cost flow. The minimum cost circulation problem has no source and sink; instead it has costs and lower and upper bounds on each edge, and seeks flow amounts within the given bounds that balance the flow at each vertex and minimize the sum over edges of cost times flow. Any minimum-cost flow instance can be converted into a minimum cost circulation instance by setting the lower bound on all edges to zero, and then making an extra edge from the sink t to the source s, with capacity c(t,s)=d and lower bound l(t,s)=d, forcing the total flow from s to t to also be d. The following problems are special cases of the minimum cost flow problem (we provide brief sketches of each applicable reduction, in turn): •
Shortest path problem (single-source). Require that a feasible solution to the minimum cost flow problem sends one unit of flow from a designated source s to a designated sink t. Give all edges infinite capacity. •
Maximum flow problem. Choose a large demand d (large enough to exceed the maximum flow; for instance, the sum of capacities out of the source vertex) Set the costs of all edges in the maximum flow instance to zero, and introduce a new edge from source to sink with unit cost and capacity d. •
Assignment problem. Suppose that each partite set in the bipartition has n vertices, and denote the bipartition by (X,Y). Give each x \in X supply 1/n and give each y \in Y demand 1/n. Each edge is to have unit capacity. == Solutions ==