Back to Graph Theory Series

Part 15: Network Flow & Cuts

August 30, 2026 Wasil Zafar 30 min read

Born from a classified Cold War study of how much traffic Soviet railways could physically carry — and a theorem so central it will resurface, directly or in disguise, for the rest of this series.

Table of Contents

  1. A Bit of History
  2. Flow Network Fundamentals
  3. Residual Networks & Augmenting Paths
  4. The Max-Flow Min-Cut Theorem
  5. Flow Reductions
  6. Real-World Applications
  7. Exercises
  8. Conclusion & Next Steps

A Bit of History

Network flow theory has an unusually dramatic origin: in 1955, RAND Corporation researchers T. E. Harris and F. S. Ross produced a classified report analyzing the capacity of the Soviet Union's railway network connecting it to Eastern Europe — explicitly framed, in Cold War terms, around how much material could flow through the network and which links, if disrupted, would bottleneck it most severely (a real map from that report, showing a specific rail "bottleneck," was declassified decades later). The following year, L. R. Ford Jr. (the same Ford of Bellman-Ford, from an earlier deep dive) and D. R. Fulkerson formalized the underlying mathematics in their 1956 RAND report "Maximal Flow Through a Network," proving the max-flow min-cut theorem and giving the world its first general algorithm for computing it — directly inspired by a literal Cold War logistics problem.

Flow Network Fundamentals

A flow network is a directed graph with a designated source \(s\) and sink \(t\). Every directed edge \((u,v)\) has a non-negative capacity \(c(u,v)\): the most that edge is allowed to carry. A flow \(f(u,v)\) is the amount we actually choose to send. The distinction is worth keeping explicit: capacity is a ceiling; flow is current usage.

Visual Intuition Read labels as flow / capacity

Flow is constrained locally, but measured globally

On an edge labeled 3 / 5, three units are currently flowing through a pipe that could carry at most five. At an ordinary junction, whatever enters must leave. Only the source is allowed to create net outgoing flow, and only the sink is allowed to absorb it.

A flow network: every edge says “flow / capacity” Capacity is the maximum; flow is what is currently being sent 3 / 4 2 / 3 3 / 5 2 / 2 5 / 6 s SOURCE a b x Conservation at x 3 + 2 in = 5 out t SINK Flow value = 5: five units leave s, and the same five units eventually enter t.

The two rules a legal flow must obey

$$0 \le f(u,v) \le c(u,v) \qquad \text{for every edge }(u,v)$$ $$\sum_{u:(u,v)\in E} f(u,v)=\sum_{w:(v,w)\in E} f(v,w) \qquad \text{for every }v\notin\{s,t\}$$

The first line is the capacity constraint. The second is flow conservation. Conservation is easiest to remember as a bookkeeping law: intermediate vertices may split or merge flow, but they cannot manufacture or destroy it. This is why the total amount leaving \(s\) must equal the total amount entering \(t\).

Analogy: Water Through Pipes

Picture capacities as pipe diameters and flow as the water currently moving through them. A junction may divide five units into three units on one outgoing pipe and two on another, but it cannot send six unless an extra unit came in. The maximum-flow problem asks for the largest sustainable source-to-sink throughput, not the largest value on any single edge.

Residual Networks & Augmenting Paths

The residual network is the idea that makes max-flow algorithms much more than “keep sending greedily until stuck.” Given a current flow \(f\), it records what changes are still legal. For an original edge \(u\to v\), there are two possible moves: push more flow forward, or cancel some of the flow that was previously sent.

Residual Intuition Forward room + reverse undo

A residual graph is an “edit history” for the current flow

Suppose an edge has capacity 5 and currently carries 3. You may still push 2 more units forward. Just as importantly, the residual graph creates a reverse option of capacity 3, meaning up to three previously committed units can be withdrawn and rerouted elsewhere.

One original edge creates two residual choices Original network u v 3 / 5 3 committed, capacity 5 Residual network u v forward residual = 5 − 3 = 2 reverse residual = 3 Reverse capacity is not a real reverse pipe. It is permission to revise an earlier decision.
$$c_f(u,v)=c(u,v)-f(u,v) \qquad\text{and}\qquad c_f(v,u)=f(u,v)$$

Augmenting paths: improve the whole flow by the bottleneck

An augmenting path is any \(s\)-to-\(t\) path in the residual network with positive residual capacity on every edge. You cannot push an arbitrary amount along it: the smallest residual capacity on the path is the bottleneck. That minimum tells you exactly how much the total flow can safely increase in one augmentation.

Worked Augmentation

The narrowest residual edge controls the entire path

Residual path s → a → b → t Residual capacities: 4, 2, 5 s a b t 4 2 5 Bottleneck = min(4, 2, 5) = 2 Augment by 2 ⇒ total flow value increases by 2

After the augmentation, each forward residual capacity on this path falls by 2 and each corresponding reverse residual capacity rises by 2. The residual graph therefore remembers both the progress we made and exactly how much of that choice could later be undone.

The Max-Flow Min-Cut Theorem

An \(s\)-\(t\) cut partitions the vertices into two sets \((S,T)\), with \(s\in S\) and \(t\in T\). Its capacity counts only original edges directed from \(S\) to \(T\):

$$c(S,T)=\sum_{u\in S,\;v\in T} c(u,v)$$ $$\boxed{\max |f|=\min_{(S,T)} c(S,T)}$$

The theorem says the best possible transportation plan and the narrowest possible bottleneck boundary have exactly the same numerical value. This is a duality: one side asks “how much can I send?”, the other asks “what is the cheapest boundary that every unit must cross?”

A cut is an upper bound; equality is a certificate

Max-Flow / Min-Cut Two proofs in one picture

When flow value = cut capacity, both sides are optimal

A saturated cut certifies a maximum flow Labels are flow / capacity S side T side CUT s a b t 3 / 4 2 / 2 1 / 1 2 / 2 3 / 4 Flow value = 5 and cut capacity = 2 + 1 + 2 = 5 ⇒ both are optimal.

Why every cut is an upper bound. By flow conservation, the net flow leaving the \(S\)-side of any cut equals the overall flow value \(|f|\). The forward edges crossing from \(S\) to \(T\) can carry at most their capacities, so \(|f|\le c(S,T)\) for every cut. Therefore no flow can ever beat the minimum cut.

Why Ford–Fulkerson eventually reaches equality. When no augmenting path remains, let \(S\) be exactly the vertices still reachable from \(s\) in the residual graph and let \(T=V\setminus S\). Then every original edge from \(S\) to \(T\) must be saturated—otherwise it would have positive forward residual capacity and its endpoint would also be reachable. Likewise, any original edge from \(T\) back to \(S\) carries zero net contribution across the boundary at optimality. The current flow therefore matches the capacity of this cut, giving the equality the theorem promises.

The optimization certificate

A candidate flow by itself says “I managed to send this much.” A cut by itself says “nobody can ever send more than this.” When the two numbers match, there is no gap left to argue about. This is why max-flow/min-cut is especially satisfying algorithmically: the solution comes with a compact proof that it is optimal.

Flow Reductions

The deeper lesson of network flow is that the “substance” moving through the network does not have to be water, trains, or data. A unit of flow can represent a matched pair, a selected path, a scheduled job, or a yes/no decision. The art is to build capacities so that legal flows correspond exactly to legal solutions of the original problem.

Why unit capacities turn flow into discrete choices

Reduction Bipartite matching as max-flow

A matching is just a unit-capacity flow network in disguise

Connect a super-source to every left-side vertex with capacity 1, every allowed left-to-right pair with capacity 1, and every right-side vertex to a super-sink with capacity 1. Conservation plus unit capacities ensures no person can be used twice. Every unit of source-to-sink flow therefore selects one disjoint matched pair.

Bipartite matching → unit-capacity max-flow Highlighted source-to-sink paths correspond to three matched pairs s t L1 L2 L3 R1 R2 R3 Max flow = 3 ⇔ maximum matching size = 3 Every edge shown in the reduction has capacity 1.

The same pattern extends further. Edge-disjoint paths use capacity 1 on original edges: each unit of integral flow becomes one path that cannot share an edge with another. For vertex-disjoint paths, split each vertex \(v\) into \(v_{in}\to v_{out}\) with capacity 1, forcing at most one unit of flow through that vertex. This is the algorithmic face of Menger's theorem from Part 8.

Reduction Mindset

Ask three questions when turning a problem into flow

1. What is one unit?

A matched pair? A path? A selected job? Decide what a single unit of flow represents.

2. What must be limited?

Use capacities to encode exclusivity, quotas, resource limits, or “at most one.”

3. What must be conserved?

Use intermediate vertices to force units entering a choice or resource to leave consistently.

Other classic reductions include project selection (profits and prerequisite dependencies become an \(s\)-\(t\) min-cut), assignment and scheduling variants, and the whimsically named baseball elimination problem. They look unrelated on the surface; the common structure is that a cut or an integral flow encodes the combinatorial decision.

Real-World Applications

Case Study

Airline Scheduling and Image Segmentation

Airlines model crew and aircraft scheduling constraints as flow networks to find feasible assignments respecting capacity limits (aircraft availability, crew rest requirements). In computer vision, min-cut image segmentation treats each pixel as a vertex, models "how likely two adjacent pixels belong to the same region" as edge capacity, and finds a minimum cut separating foreground from background — the max-flow min-cut theorem turning a continuous-looking visual problem into an exactly solvable discrete one.

Airline SchedulingImage Segmentation

One theorem, two interpretations

In logistics, a minimum cut identifies the infrastructure whose combined capacity forms the true bottleneck. In image segmentation, a minimum cut identifies the cheapest boundary separating foreground from background. The mathematics is identical; only the meaning assigned to capacities changes.

Exercises

  1. Construct a small flow network (4-5 vertices) and find its maximum flow by hand, then identify the corresponding minimum cut and verify their values match.
  2. Explain why reverse residual edges are necessary for correctness — construct a small example where a greedy augmenting-path choice without them gets stuck below the true maximum flow.
  3. Model the "can vertex-disjoint paths still connect \(s\) and \(t\) after removing \(k\) vertices" question (Part 8's Menger's theorem) as a flow problem with vertex capacities of 1.
  4. Challenge: Formulate the baseball elimination problem as a flow network for a small 4-team scenario (with remaining games between specific pairs), and determine using max-flow whether a given team is mathematically eliminated.

Conclusion & Next Steps

The max-flow min-cut theorem is one of the most quietly powerful results in this entire series — it directly generalizes Menger's theorem, and reduces bipartite matching, disjoint paths, and scheduling problems that don't superficially resemble flow at all. Next, we specialize this machinery to one of its most important applications: matching vertices optimally in bipartite graphs.

Next in the Series

In Part 16: Matching Theory, we meet Hall's Marriage Theorem, König's theorem, and the flow-based and combinatorial algorithms that compute optimal matchings.