Flow Ladder¶
This ladder should build the instinct that maximum flow is mostly about modeling: once the right network is built, Dinic is often the straightforward part.
Inside the repo, the tutorial-first bridge page for this whole family is Maximum Flow.
Who This Is For¶
Use this ladder if:
- flow still feels like a black box
- node splitting and cut interpretations are not yet automatic
- you want to know when flow is the right reduction and when it is overkill
Warm-Up¶
- classic max flow
- edge-disjoint path reductions
Target skill:
- trust the residual-network model and reverse edges
Core¶
- FFLOW
- Police Chase
- node splitting
- cut interpretation
Target skill:
- translate capacity statements into a correct network
Stretch¶
- Maximum Flow (Push-Relabel)
- Minimum Cut
- MCQUERY
- Reactor Cooling
- MINCOST
- compare bipartite matching reductions with plain flow reductions
Transition note:
Maximum Flow (Push-Relabel)is the clean sibling rep where the model stays identical but the engine shifts from blocking-flow augmenting paths to preflow, heights, excess, and the gap heuristicMinimum Cutis the clean handoff from one source-sink cut worldview into the dedicated Randomized / Global Min-Cut lane, where the graph is still undirected but there is no designated pairMCQUERYis the clean handoff from one max-flow/min-cut instance into the dedicated Gomory-Hu ladder, where repeated cuts are compressed into one treeReactor Coolingis the clean handoff from plain max flow intolower / upper bounds -> feasible circulationMINCOSTis not just “Dinic with costs”; it switches to a min-cost-flow engine with shortest augmenting paths, reduced costs, and potentials
Target skill:
- see flow as a modeling language, not just one algorithm
- recognize when the source/sink pair disappears and the right next stop is global min-cut
- spot when lower bounds turn plain Dinic into a reduction step rather than the full solution
- recognize when a whole family of min-cuts can be compressed into one tree
Retrieval Layer¶
- max flow / min cut route -> Flow hot sheet
- clean max-flow starter -> dinic.cpp
- preflow / height-label engine sibling -> Push-Relabel hot sheet
- push-relabel starter -> push-relabel-max-flow.cpp
- no-source/sink undirected cut route -> Global Min-Cut hot sheet
- global cut starter -> stoer-wagner-global-mincut.cpp
- lower/upper bounded circulation route -> Flow With Lower Bounds hot sheet
- lower-bounds starter -> flow-lower-bounds.cpp
- costed flow route -> Min-Cost Flow hot sheet
- cost-aware starter -> min-cost-flow.cpp
- compare against matching when the reduction is ambiguous -> Matching hot sheet
Exit Criteria¶
You are ready to move on when:
- you can explain why reverse edges exist
- you can spot vertex-capacity problems and apply node splitting
- you can tell whether matching or flow is the cleaner reduction