Definition · Cuts and their capacityAn s-t cut is a set of nodes S containing the source and not the sink. Its capacity is the total capacity of the arcs whose tail is in S and whose head is not — arcs running the other way do not count.
The value of a flow is the net amount leaving the source. Every unit of it must cross every cut, so the value of any flow is at most the capacity of any cut.
That is the easy half and it is worth having on its own: any cut you can write down is a bound on every flow that will ever be found, and an arithmetic check that takes seconds. The hard half is that the bound is attained — that some cut has exactly the capacity of the largest flow — and the algorithm proves it by producing the cut.
arcs s>a 3 s>b 2 a>b 2 a>t 2 b>t 3
every cut, enumerated: S capacity
{s} 5
{s,a,b} 5
{s,a} 6
{s,b} 6
two of the four are minimum, so a minimum cut need not be unique
augmenting, from nothing:
residual s>a s>b a>b a>t b>t [x>y] below is BACKWARD
take s>a, a>b, b>t bottleneck 2 value 2
take s>a, a>t bottleneck 1 value 3
take s>b, [b>a], a>t bottleneck 1 value 4 BACKWARD
take s>b, b>t bottleneck 1 value 5
no residual path from s to t remains
final flow s>a 3 s>b 2 a>b 1 a>t 2 b>t 3
reachable from s in the residual network: {s}
capacity of that cut: 3 + 2 = 5 = the flow value
Notice the third augmentation. The path runs from s to b on a forward arc, then from b to a on a backward arc — there is no arc from b to a in the network at all; what exists is a unit already sent from a to b, which this path un-sends — and then from a to t. The net effect is to reroute a unit that had been sent the wrong way. Without backward arcs the algorithm would have stopped at 4.
Theorem · Max-flow min-cutIn any network the maximum value of an s-t flow equals the minimum capacity of an s-t cut.
When no augmenting path remains, let S be the set of nodes reachable from the source in the residual network. Every arc out of S must be saturated, or its forward residual arc would extend the reachable set; every arc into S must be empty, or its backward residual arc would. So the flow across that cut is exactly its capacity, and since flow value is at most any cut's capacity, both are optimal.
The proof is the algorithm's stopping condition read as a statement about the cut, which is why the certificate costs nothing extra: it is the set the search had already computed when it failed to find a path. The lab shades it and prints its capacity beside the flow value.
Why a cut bounds a flow: the dual
The maximum-flow programme on the four-node network above has five variables — one per arc — and seven rows: two conservation equalities at the interior nodes a and b, and five capacity bounds. Its dual therefore has seven variables, one for each of those rows: a potential for each interior node and an indicator for each arc.
Example · Two cuts, written as dual pointsThe cut S = {s} becomes the point with both node potentials at zero and the indicators on s>a and s>b at one, everything else zero. The cut S = {s, a, b} becomes both potentials at one and the indicators on a>t and b>t at one.
The lab checks both against the dual's constraints row by row: each is feasible, and each has dual objective 5 — exactly its own capacity. It then does the same for every cut of the network, including the two of capacity 6, and every one is a feasible dual point whose objective is its capacity. That is why a cut bounds a flow: it is weak duality with different nouns.
And the exact simplex on the primal programme returns 5. A feasible primal point worth 5, a feasible dual point worth 5, and the simplex agreeing with both: strong duality, exhibited on the instance rather than cited.
Example · Minimum cuts need not be unique, or fewThe four-node instance has two minimum cuts out of four. A second instance has exactly one, {s, b} at capacity 5, and it is the reachable set the algorithm lands on. A six-node instance has sixteen cuts, four of them minimum at capacity 7, and the augmenting loop still finishes at a flow of 7.
The reachable set is one minimum cut and the algorithm names it; the others are just as valid as certificates. What the theorem asserts is about the number 7, not about which set attains it.
What is deliberately not here is the choice of augmenting path. Take them in a bad order and the algorithm still terminates on integer capacities, but the number of augmentations can be much larger than it needs to be; bounding it is the Algorithms path's business, in its treatment of graph algorithms. The lab lets you pick any residual path from a list precisely so that the choice is visible as a choice.