SECTION 1
Historical Context & Motivation
The study of network flows originated not in a mathematics department, but in the context of Cold War logistics and military planning. During the 1950s, the United States Air Force sought to determine the maximum capacity at which supplies could be shipped through the Soviet railway network — and, conversely, the minimum set of links whose destruction would sever that capacity entirely. This practical question gave rise to one of the most elegant and widely applicable frameworks in combinatorial optimization, connecting graph theory, linear programming, and algorithm design in a single coherent structure.
The foundational result, the Max-Flow Min-Cut Theorem, was proved independently by multiple researchers and revealed a deep duality: the maximum amount of flow that can be pushed through a network equals the minimum capacity that must be removed to disconnect the source from the sink. This insight transformed operations research, telecommunications, and eventually computer science, where network flow algorithms underpin everything from image segmentation to bipartite matching.
1954 • Ford & Fulkerson Begin Flow Research
1956 • Max-Flow Min-Cut Theorem Published
1970 • Dinic's Algorithm
1972 • Edmonds–Karp Algorithm
1986–present • Modern Advances
The central question that the maximum flow framework addresses is deceptively simple: given a directed graph with edge capacities, a designated source vertex, and a designated sink vertex, what is the greatest total rate of flow that can be routed from source to sink while respecting every edge's capacity constraint? As we will see, answering this question requires a careful interplay between local decisions at individual edges and global structure across the entire network.
SECTION 2
Core Principles & Definitions
A flow network is a directed graph G = (V, E) equipped with a non-negative capacity function c : E → ℝ≥0 and two distinguished vertices: a source s (which only emits flow) and a sink t (which only absorbs flow). The capacity c(u, v) on each edge (u, v) represents the upper bound on the rate at which material — data packets, fluid, goods — can traverse that link. If an edge (u, v) is not in E, we define c(u, v) = 0 by convention.
Capacity Constraint
Flow Conservation
Value of a Flow
Residual Graph
Augmenting Path
KEY TAKEAWAY
SECTION 3
Visual Explanation — A Flow Network
The following diagram depicts a flow network with source s and sink t. Each directed edge is labeled with the notation f / c where f denotes the current flow and c denotes the edge capacity. The coloring indicates how saturated each edge is: fully used edges appear in red, partially used edges in amber, and unused capacity edges in cyan.
Observe that the edge s → A is fully saturated at 10/10, meaning no additional flow can be pushed along it directly. However, the edge A → D carries only 4 of its 9 available capacity, and C → D is completely unused at 0/7. The existence of these slack edges suggests that there may be alternative routes through which additional flow could reach t. The residual graph formalizes this intuition by introducing reverse edges that permit the rerouting of previously assigned flow, opening up new augmenting paths that were invisible in the original network.
SECTION 4
Mathematical Framework
We now formalize the definitions introduced above. Let G = (V, E) be a directed graph with capacity function c and distinguished vertices s, t ∈ V. A flow in G is a function f : V × V → ℝ satisfying two properties: the capacity constraint and flow conservation. From these two simple axioms, the entire theory unfolds.
CAPACITY CONSTRAINT
The flow on each edge must be non-negative and cannot exceed the edge's capacity. If (u, v) ∉ E, then f(u, v) = 0.
FLOW CONSERVATION
For every internal vertex u, the total outgoing flow equals the total incoming flow. The source s and sink t are exempt — s is a net producer and t is a net consumer of flow.
VALUE OF A FLOW
The value of a flow is the net flow out of the source. Equivalently, |f| equals the net flow into the sink. The maximum flow problem asks for a feasible flow f* that maximizes |f|.
RESIDUAL CAPACITY
The residual capacity along a forward edge (u, v) is the unused capacity. The residual capacity along a reverse edge (u, v) — representing the ability to cancel flow on (v, u) — equals the current flow on (v, u). The residual graph Gf consists of all edges with positive residual capacity.
A crucial structural concept is an s–t cut (S, T), which is a partition of V into two disjoint sets S and T with s ∈ S and t ∈ T. The capacity of this cut is c(S, T) = ∑ c(u, v) over all edges with u ∈ S, v ∈ T. The Max-Flow Min-Cut Theorem states that the maximum value of any s–t flow equals the minimum capacity of any s–t cut. This duality is both theoretically profound — it connects to LP duality — and computationally useful, as it provides a certificate of optimality: once we exhibit a flow and a cut of equal value, both are optimal.
SECTION 5
The Ford–Fulkerson Method & Residual Graphs
The Ford–Fulkerson method is the canonical algorithm for computing maximum flows. It is technically a method rather than an algorithm because it does not specify how to find augmenting paths — that choice yields different algorithmic variants with different time complexities. The procedure is elegant: start with zero flow on all edges, repeatedly find an augmenting path from s to t in the residual graph, push the maximum possible flow along that path (the bottleneck capacity), update the residual graph, and repeat until no augmenting path exists.
- Initialize: Set f(u, v) = 0 for all edges. Construct the residual graph Gf = G (since all capacity is residual).
- Search: Find any s–t path P in Gf. If none exists, terminate — the current flow is maximum.
- Augment: Compute the bottleneck Δ = min cf(u, v) over all edges (u, v) on P. Push Δ units along P.
- Update: For each forward edge on P, decrease its residual capacity by Δ and increase the reverse edge by Δ. Return to Search.
The reverse edges in the residual graph are the key insight that makes the Ford–Fulkerson method correct. Without them, a greedy first choice could permanently block the optimal solution. Consider a scenario where an early augmenting path uses an edge that would have been more valuable on a different route. The reverse edge in Gf effectively allows a later iteration to "undo" that assignment by routing flow backward along the reverse edge, thereby rerouting the original flow to a more productive path. This self-correcting mechanism guarantees that the method converges to the true maximum flow regardless of the order in which augmenting paths are selected — provided, in the case of irrational capacities, that an appropriate path selection strategy (such as BFS) is used.
Termination Caveat
SECTION 6
Worked Example — Finding Maximum Flow
Consider a simple flow network with vertices {s, A, B, t} and edges: s → A (capacity 10), s → B (capacity 5), A → B (capacity 4), A → t (capacity 7), B → t (capacity 10). We apply the Ford–Fulkerson method to find the maximum flow from s to t.
Max Flow via Ford–Fulkerson
- 1
Step 1 — Initialize
Set f(e) = 0 for all edges. The residual graph Gf is identical to the original network since all capacity is unused. Current flow value: |f| = 0.|f| = 0 - 2
Step 2 — First Augmenting Path: s → A → t
Find path P₁ = s → A → t in Gf. The bottleneck is Δ₁ = min(cf(s,A), cf(A,t)) = min(10, 7) = 7. Push 7 units along P₁. Update: f(s,A) = 7, f(A,t) = 7. Residual: cf(s,A) = 3, cf(A,t) = 0; reverse edges (A,s) = 7, (t,A) = 7 appear.|f| = 7 - 3
Step 3 — Second Augmenting Path: s → B → t
Find path P₂ = s → B → t. Bottleneck: Δ₂ = min(cf(s,B), cf(B,t)) = min(5, 10) = 5. Push 5 units. Update: f(s,B) = 5, f(B,t) = 5.|f| = 12 - 4
Step 4 — Third Augmenting Path: s → A → B → t
The direct path s → A → t is blocked (A → t saturated). But in Gf, we can use s → A → B → t. Bottleneck: Δ₃ = min(cf(s,A), cf(A,B), cf(B,t)) = min(3, 4, 5) = 3. Push 3 units. Update: f(s,A) = 10, f(A,B) = 3, f(B,t) = 8.|f| = 15 - 5
Step 5 — Termination Check
Search for an s–t path in Gf. Edge s → A has cf = 0 (saturated), edge s → B has cf = 0 (saturated). No outgoing residual edge from s remains. No augmenting path exists, so the current flow is maximum.Maximum flow |f*| = 15 - 6
Step 6 — Verify via Min-Cut
Consider the cut S = {s}, T = {A, B, t}. The capacity crossing the cut is c(s,A) + c(s,B) = 10 + 5 = 15. Since |f*| = c(S,T) = 15, the Max-Flow Min-Cut Theorem confirms optimality. This cut is a minimum cut.Min cut capacity = 15 = Max flow ✓
SECTION 7
Algorithm Variants — Strengths & Limitations
The Ford–Fulkerson method is a template, and its efficiency depends critically on the strategy used to select augmenting paths. Different choices yield algorithms with vastly different worst-case time complexities. The table below compares the most important variants, their path selection strategies, and their computational guarantees.
| Algorithm | Path Strategy | Time Complexity | Key Strength |
|---|---|---|---|
| Ford–Fulkerson (DFS) | Any path (typically DFS) | O(E × |f*|) | Simple to implement; good for small integer capacities |
| Edmonds–Karp | Shortest path (BFS) | O(VE²) | Polynomial; independent of capacity magnitudes |
| Dinic's Algorithm | Blocking flows in level graph | O(V²E) | Faster in practice; O(E√V) for unit-capacity graphs |
| Push–Relabel | Local push operations with height labels | O(V²E) or O(V³) | No global path search; highly parallelizable |
Comparison of major maximum flow algorithms
KEY TAKEAWAY
SECTION 8
Connections to Advanced Theory
The maximum flow problem sits at the heart of combinatorial optimization and connects to a remarkably wide array of more advanced topics. Understanding max flow provides the conceptual scaffolding for problems in matching, covering, scheduling, and even machine learning. The table below highlights several important generalizations and the role max flow plays in each.
| Advanced Topic | Connection to Max Flow |
|---|---|
| Bipartite Matching | A maximum matching in a bipartite graph can be found by constructing a flow network with unit capacities. The max flow equals the size of the maximum matching (König's theorem connects the min cut to the minimum vertex cover). |
| Minimum Cost Flow | Extends max flow by assigning costs per unit flow on each edge. The objective becomes: among all maximum flows, find the one with minimum total cost. Solved via successive shortest paths or cycle-canceling algorithms. |
| Linear Programming Duality | The Max-Flow Min-Cut Theorem is a special case of LP strong duality. The max flow LP's dual has the same optimal value and corresponds to the min cut problem. This generalizes to arbitrary LP via the duality theorem of linear programming. |
| Image Segmentation | In computer vision, separating foreground from background in an image is modeled as a min-cut problem on a pixel graph. Efficient max-flow solvers enable real-time segmentation in medical imaging and video editing. |
| Multi-Commodity Flow | Generalizes max flow to multiple source-sink pairs sharing edge capacities. Unlike single-commodity flow, the problem becomes NP-hard in the integer case. LP relaxations and approximation algorithms are active research areas. |
Advanced topics connected to maximum flow theory
Looking forward, recent breakthroughs have achieved nearly linear time algorithms for maximum flow in general graphs, combining techniques from continuous optimization (interior point methods), graph sparsification, and data structures for dynamic trees. These results, published by Chen et al. (2022), represent a culmination of decades of research and demonstrate that the simple question posed by Ford and Fulkerson in the 1950s continues to drive frontier research in theoretical computer science. For the student of discrete mathematics, mastering the basics of network flow provides both a powerful algorithmic toolkit and an entry point into the deep structural theory of graphs and optimization.
SECTION 9
Practice Problems
Question 1: CONCEPTUAL
Show answer
Question 2: BASIC CALCULATION
Show answer
Question 3: INTERMEDIATE
Show answer
Question 4: APPLIED
Show answer
Question 5: CRITICAL THINKING
Show answer
SUMMARY
Summary
Summary
A flow network is a directed graph with edge capacities, a source, and a sink. A feasible flow satisfies the capacity constraint (flow ≤ capacity on every edge) and flow conservation (inflow = outflow at every internal vertex). The maximum flow problem asks for the greatest total flow from source to sink. The Ford–Fulkerson method solves this by iteratively finding augmenting paths in the residual graph — a graph that includes both forward edges (unused capacity) and reverse edges (cancellable flow) — until no such path exists.
The Max-Flow Min-Cut Theorem establishes that the maximum flow value equals the minimum capacity of any s–t cut, providing both a duality result and a certificate of optimality. Polynomial variants like the Edmonds–Karp algorithm (O(VE²)) guarantee efficient computation. Network flow theory extends naturally to bipartite matching, minimum cost flow, and LP duality, making it one of the most versatile tools in combinatorial optimization.