- Published on
Network Flows - Part 2
- Authors

- Name
- Till Heller
In Part 1, we motivated network flows with a supply chain example and outlined what this series will cover. Now let's get precise. In this part, we introduce the formal definitions — flow networks, flows, and cuts — and establish the first fundamental relationship between them.
Flow Networks
A flow network is a directed graph where each arc has a capacity — a limit on how much "stuff" can pass through it. There are two special vertices: a source, where flow originates, and a sink, where flow is consumed.
Definition 1. A flow network is a tuple , where:
- is a directed graph,
- is the source,
- is the sink, with ,
- is the capacity function, assigning a non-negative capacity to each arc .
Think of the arcs as pipes and the capacities as their diameters — a wider pipe can carry more water. The source is the reservoir where water enters the system, and the sink is where it drains out. Everything in between is just routing the water through.
Let's look at a small example. Consider the flow network with vertices and arcs with capacities , , , , and . The source can push up to units through and through , and the flow must eventually reach .
We will use this example throughout this part to illustrate the definitions.

Flows
Now that we have the network, we can define what it means for something to "flow" through it. A flow assigns a value to each arc — how much is actually being transported — subject to two natural constraints: you can't exceed the capacity of an arc, and nothing gets created or destroyed at intermediate vertices.
Definition 2. A flow in a flow network is a function satisfying:
(i) Capacity constraint: for every arc .
(ii) Flow conservation: For every vertex , the total flow entering equals the total flow leaving :
The capacity constraint says we can't send more through a pipe than it can handle. Flow conservation says that at every intermediate vertex, what goes in must come out — nothing is lost, nothing is stored. Only the source and the sink are exempt: the source produces flow, and the sink absorbs it.
In our example, one valid flow is , , , , . Let's verify: at vertex , the incoming flow is and the outgoing flow is — conservation holds. At vertex , the incoming flow is and the outgoing flow is — conservation holds again.
The most important number associated with a flow is how much total flow reaches the sink.
Definition 3. The value of a flow , denoted , is the net flow leaving the source:
In most networks, no arcs point into the source, so the value is simply the total flow on all arcs leaving . In our example, .

By flow conservation, the value of a flow also equals the net flow arriving at the sink — what enters the system must eventually leave it.
Observation 1. For any flow , the net flow leaving the source equals the net flow entering the sink:
Proof. Sum the flow conservation equation over all vertices . On the left, we have the total flow on all arcs, counting each arc's flow once as incoming at its head. On the right, we have the total flow on all arcs, counting each arc's flow once as outgoing at its tail. Every arc with both endpoints in appears on both sides and cancels. What remains on the left are arcs arriving from or from , and on the right are arcs leaving toward or toward . Rearranging gives the desired equality.
The Maximum Flow Problem
Given a flow network, we naturally want to push as much flow as possible from source to sink. This is the central question of the series.
Maximum Flow Problem. Given a flow network , find a flow of maximum value .
In our example, can we do better than ? The source can push at most units total. But can all units reach ? It turns out the answer is — we'll see why after we introduce cuts.
Cuts
If a flow represents how much we can push through a network, a cut represents a bottleneck — a place where the network can be severed to separate the source from the sink. The capacity of the narrowest such bottleneck gives an upper bound on how much flow we can send.
Definition 4. An --cut in a flow network is a partition of the vertex set into two sets and such that and .
Definition 5. The capacity of an --cut is the total capacity of all arcs going from to :
Notice that we only count arcs going from to , not the other way around. Arcs from to don't contribute to the cut capacity — they carry flow in the "wrong" direction.
In our example, consider the cut , . The arcs from to are with capacity , with capacity , and with capacity . So . Another cut is , , which gives . And the cut , gives .
Interestingly, all three cuts in this example have capacity . That won't always be the case — different cuts can have very different capacities.

Weak Duality
Now we arrive at the key relationship between flows and cuts. It turns out that the value of any flow is bounded above by the capacity of any cut. This is a powerful result: every cut provides a certificate that no flow can exceed a certain value.
Lemma 1 (Weak Duality). For any flow and any --cut in a flow network, we have
Proof. We first show that the value of any flow can be expressed using any cut. By summing the flow conservation equation over all vertices in and adding the definition of , we get:
This says the value of the flow equals the net flow crossing the cut from to 1. Now, the second sum is non-negative, so:
where the last inequality uses the capacity constraint .
Let's verify this in our example. We found a flow of value and three cuts, each with capacity . The lemma confirms . But is the maximum flow actually , or can we do better? And what is the minimum cut capacity? Trying cuts by hand is tedious and error-prone — we need a systematic approach. We'll develop exactly that in the next part, where we introduce residual graphs and prove the Max-Flow Min-Cut Theorem: the statement that the maximum flow value always equals the minimum cut capacity.
Looking Ahead
We've set up the formal framework: flow networks, flows, cuts, and the weak duality between them. The natural question is: can weak duality be strengthened to an equality? In the next part, we'll answer this with the Max-Flow Min-Cut Theorem — one of the most important results in combinatorial optimization. To prove it, we'll introduce residual graphs and augmenting paths, which will also lead us directly to the first algorithms for computing maximum flows.
Footnotes
This identity is sometimes called the flow-cut identity and is useful far beyond this proof. ↩