- Published on
Network Flows - Part 3
- Authors

- Name
- Till Heller
In Part 2, we defined flow networks, flows, and cuts, and proved weak duality: the value of any flow is at most the capacity of any cut. We ended with an open question — is our flow of value actually optimal, and can we find a matching cut? In this part, we'll develop the tools to answer both questions at once. The key idea is the residual graph, which tells us exactly where and how we can improve a flow.
Residual Graphs
Given a flow in a network, some arcs might still have room for more flow, while others are completely saturated. But there's a subtlety: even on a saturated arc, we can effectively "undo" some of the flow by sending flow backwards. The residual graph captures both possibilities.
Definition 6. Given a flow network with and a flow , the residual capacity of an arc is defined as:
- Forward residual capacity: , representing how much more flow can be pushed along .
- Backward residual capacity: , representing how much flow on can be "cancelled" by sending flow from back to .
Definition 7. The residual graph is the directed graph on the same vertex set , where contains every arc with positive residual capacity:
The forward arcs in the residual graph tell us where we can send more flow. The backward arcs tell us where we can reroute flow that's already been assigned. This ability to "undo" flow is what makes residual graphs so powerful — it means we don't have to get the flow right on the first try.
Let's build the residual graph for our running example. Recall the flow from Part 2: , , , , , with value .
For each original arc, we compute the forward and backward residual capacities:
| Arc | Capacity | Flow | Forward | Backward |
|---|---|---|---|---|
| (as ) | ||||
| (as ) | ||||
| (as ) | ||||
| (as ) | ||||
| (as ) |
The residual graph has arcs (omitting those with zero residual capacity): with capacity , with , with , with , with , with , with , and with .

Augmenting Paths
Now the key question: does the residual graph contain a path from to ? If it does, we can push more flow along that path and increase the flow value. Such a path is called an augmenting path.
Definition 8. An augmenting path (with respect to a flow ) is a directed path from to in the residual graph .
Let's look at our residual graph. Can we find a path from to ? Starting at , we can go to (residual capacity ). From , we can go to (residual capacity ). From , we can go to (residual capacity ). The path is an augmenting path.

How much flow can we push along this path? We're limited by the smallest residual capacity along the way — the bottleneck.
Definition 9. The bottleneck of an augmenting path is the minimum residual capacity along :
For our path , the bottleneck is . We can push one additional unit of flow.
To update the flow, we increase the flow by on each forward arc of the path and decrease it by on each backward arc. In our case, all arcs on the path are forward arcs of the original network, so we simply add to each:
The arcs and remain unchanged. The new flow has value .
Let's verify that is still a valid flow. At vertex : incoming , outgoing — conservation holds. At vertex : incoming , outgoing — conservation holds. All capacity constraints are satisfied too.
Can we push even more? Let's build the new residual graph for :
| Arc | Capacity | Flow | Forward | Backward |
|---|---|---|---|---|
| (as ) | ||||
| (as ) | ||||
| (as ) | ||||
| (as ) | ||||
| (as ) |
The residual arcs are , , , , and — all backward arcs. Crucially, vertex has no outgoing arcs in the residual graph, so there is no path from to . We can't push any more flow.
The Max-Flow Min-Cut Theorem
The observation above — that a flow is maximum precisely when no augmenting path exists — is one direction of the most important theorem in network flow theory. The other direction connects this to cuts, establishing that the maximum flow value always equals the minimum cut capacity.
Theorem 1 (Max-Flow Min-Cut Theorem, Ford and Fulkerson, 1956). In a flow network , the following three statements are equivalent:
(i) is a maximum flow.
(ii) There is no augmenting path with respect to (i.e., no --path in the residual graph ).
(iii) There exists an --cut with .
Moreover, .
Proof. We prove three implications.
(i) (ii): We prove the contrapositive. Suppose there exists an augmenting path from to in with bottleneck . Define a new flow by modifying along : for each arc on , if is a forward arc of the original network, set ; if corresponds to a backward arc (i.e., is in the original network), set . All other arcs keep their flow. One can verify that satisfies the capacity constraints (by definition of the residual capacity) and flow conservation (since on the path, each intermediate vertex gains incoming and outgoing). The value increases: , so is not maximum.
(ii) (iii): Suppose there is no augmenting path. Let be the set of all vertices reachable from in the residual graph , and let . Since is not reachable from , we have and , so is a valid --cut.
Now consider any arc in the original network with and . Since is not reachable from in , the forward residual capacity must be zero: , which means . Similarly, for any arc with and , the backward residual capacity from to would make reachable from — but is not reachable from , so this isn't useful. However, the forward residual capacity of the reverse direction tells us: since is reachable but is not, we need .
Using the flow-cut identity from Part 2:
(iii) (i): If for some cut , then by weak duality (Lemma 1 from Part 2), every flow satisfies . So is maximum.
The equivalence of (i), (ii), and (iii) immediately gives us the max-flow min-cut equality: .
Applying the Theorem
Let's use the theorem to wrap up our running example. After augmenting, we obtained a flow with value and no augmenting path — condition (ii) is satisfied. By the theorem, is a maximum flow.
The proof of (ii) (iii) also tells us how to find the minimum cut: take to be the vertices reachable from in the residual graph. In our case, has no outgoing arcs in , so and . The cut capacity is , which matches .
This confirms that the maximum flow is and the minimum cut is with capacity . The bottleneck in this network is the total capacity leaving the source — the arcs out of are the limiting factor.

Integrality
There is one more property worth mentioning. In many applications, we want integer flows — you can't ship half a truck or assign half a person to a task. Fortunately, when the capacities are integers, we're guaranteed that an integer maximum flow exists.
Theorem 2 (Integrality Theorem). If all capacities in a flow network are integers, then there exists a maximum flow that is integer-valued.
This follows from the augmenting path approach: if we start with the zero flow (which is integer) and always augment along paths in the residual graph, the bottleneck is always an integer (since it's the minimum of integer residual capacities). Each augmentation preserves integrality, and the process terminates because the flow value increases by at least each time and is bounded by the finite cut capacity1.
Looking Ahead
We now have the central theorem of network flow theory and a clear strategy for finding maximum flows: repeatedly find augmenting paths and push flow along them. But several questions remain. How do we choose augmenting paths? Does the process always terminate? How fast is it? In the next part, we'll answer these questions by studying the Ford-Fulkerson method and the Edmonds-Karp algorithm, which turns the augmenting path idea into an efficient algorithm with guaranteed polynomial running time.
Footnotes
The integrality theorem is essential for applications like bipartite matching, where we model the matching problem as a flow network with unit capacities. The theorem guarantees that the maximum flow corresponds to an actual matching — see Part 8 of the Introduction to Graph Theory series. ↩