Step 1 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 0/10 Edge from node S to node B 0/10 Edge from node A to node B 0/2 Edge from node A to node C 0/8 Edge from node B to node C 0/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 0/10 Edge from node D to node T 0/10 S A B C D T phase 0 total_flow 0 level_S - level_A - level_B - level_C - level_D - level_T - State Flow network with 6 nodes, 8 edges. Each edge shows flow/capacity . Dinic's alternates BFS (level graph) and DFS (blocking flow).
Step 2 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 0/10 Edge from node S to node B 0/10 Edge from node A to node B 0/2 Edge from node A to node C 0/8 Edge from node B to node C 0/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 0/10 Edge from node D to node T 0/10 S A B C D T phase 1 (BFS) total_flow 0 level_S 0 level_A - level_B - level_C - level_D - level_T - State Phase 1 — BFS: Build level graph. l e v e l [ S ] = 0 level[S]=0 l e v e l [ S ] = 0 , expand layer by layer.
Step 3 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 0/10 Edge from node S to node B 0/10 Edge from node A to node B 0/2 Edge from node A to node C 0/8 Edge from node B to node C 0/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 0/10 Edge from node D to node T 0/10 S A B C D T phase 1 (BFS) total_flow 0 level_S 0 level_A 1 level_B 1 level_C - level_D - level_T - State From S S S : reach A A A and B B B . l e v e l [ A ] = 1 level[A]=1 l e v e l [ A ] = 1 , l e v e l [ B ] = 1 level[B]=1 l e v e l [ B ] = 1 .
Step 4 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 0/10 Edge from node S to node B 0/10 Edge from node A to node B 0/2 Edge from node A to node C 0/8 Edge from node B to node C 0/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 0/10 Edge from node D to node T 0/10 S A B C D T phase 1 (BFS) total_flow 0 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T - State From A A A ,B B B : reach C C C and D D D . l e v e l [ C ] = 2 level[C]=2 l e v e l [ C ] = 2 , l e v e l [ D ] = 2 level[D]=2 l e v e l [ D ] = 2 . Edge A → B A \to B A → B skipped (same level).
Step 5 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 0/10 Edge from node S to node B 0/10 Edge from node A to node B 0/2 Edge from node A to node C 0/8 Edge from node B to node C 0/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 0/10 Edge from node D to node T 0/10 S A B C D T phase 1 (BFS) total_flow 0 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State From C C C ,D D D : reach T T T . l e v e l [ T ] = 3 level[T]=3 l e v e l [ T ] = 3 . Level graph complete. Only edges going from level k k k to k + 1 k+1 k + 1 are kept.
Step 6 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 0/10 Edge from node S to node B 0/10 Edge from node A to node B 0/2 Edge from node A to node C 0/8 Edge from node B to node C 0/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 0/10 Edge from node D to node T 0/10 S A B C D T phase 1 (DFS) total_flow 0 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Phase 1 — DFS 1: Find path S → A → C → T S \to A \to C \to T S → A → C → T . Bottleneck = min ( 10 , 8 , 10 ) = 8 = \min(10, 8, 10) = 8 = min ( 10 , 8 , 10 ) = 8 . Push 8.
Step 7 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 0/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 0/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 8/10 Edge from node D to node T 0/10 S A B C D T phase 1 (DFS) total_flow 8 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Update: S → A S \to A S → A : 8/10, A → C A \to C A → C : 8/8 (saturated!), C → T C \to T C → T : 8/10. Total = 8 = 8 = 8 .
Step 8 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 0/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 0/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 8/10 Edge from node D to node T 0/10 S A B C D T phase 1 (DFS) total_flow 8 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Phase 1 — DFS 2: A → C A \to C A → C saturated. DFS backtracks, tries S → B → C → T S \to B \to C \to T S → B → C → T . Bottleneck = min ( 10 , 6 , 2 ) = 2 = \min(10, 6, 2) = 2 = min ( 10 , 6 , 2 ) = 2 .
Step 9 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 2/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 2/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 10/10 Edge from node D to node T 0/10 S A B C D T phase 1 (DFS) total_flow 10 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Push 2. C → T C \to T C → T : 10/10 (saturated!). Total = 10 = 10 = 10 .
Step 10 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 2/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 2/6 Edge from node B to node D 0/5 Edge from node C to node D 0/3 Edge from node C to node T 10/10 Edge from node D to node T 0/10 S A B C D T phase 1 (DFS) total_flow 10 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Phase 1 — DFS 3: C → T C \to T C → T saturated. DFS tries S → B → D → T S \to B \to D \to T S → B → D → T . Bottleneck = min ( 8 , 5 , 10 ) = 5 = \min(8, 5, 10) = 5 = min ( 8 , 5 , 10 ) = 5 .
Step 11 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 7/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 2/6 Edge from node B to node D 5/5 Edge from node C to node D 0/3 Edge from node C to node T 10/10 Edge from node D to node T 5/10 S A B C D T phase 1 (DFS) total_flow 15 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Push 5. B → D B \to D B → D : 5/5 (saturated!). Total = 15 = 15 = 15 .
Step 12 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 7/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 2/6 Edge from node B to node D 5/5 Edge from node C to node D 0/3 Edge from node C to node T 10/10 Edge from node D to node T 5/10 S A B C D T phase 1 done total_flow 15 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Phase 1 — DFS done: No more paths to T T T in level graph. All edges from B B B to level-2 are saturated (B → C B \to C B → C : 2/6? No, residual = 4 = 4 = 4 ). Actually C → T C \to T C → T saturated blocks C C C . B → D B \to D B → D saturated blocks D D D . Blocking flow complete.
Step 13 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 7/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 2/6 Edge from node B to node D 5/5 Edge from node C to node D 0/3 Edge from node C to node T 10/10 Edge from node D to node T 5/10 S A B C D T phase 2 (BFS) total_flow 15 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Phase 2 — BFS: Rebuild level graph on residual. Reverse edges now exist: C → A C \to A C → A (cap 8), T → C T \to C T → C (cap 10), etc.
Step 14 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 7/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 2/6 Edge from node B to node D 5/5 Edge from node C to node D 0/3 Edge from node C to node T 10/10 Edge from node D to node T 5/10 S A B C D T phase 2 (BFS) total_flow 15 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Level graph same structure (T T T still at level 3). But available edges differ due to residual capacities. Key: S → A S \to A S → A has 2, A → B A \to B A → B has 2, B → C B \to C B → C has 4, C → T C \to T C → T saturated — must use reverse C → A C \to A C → A (8) and reroute.
Step 15 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 7/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 2/6 Edge from node B to node D 5/5 Edge from node C to node D 0/3 Edge from node C to node T 10/10 Edge from node D to node T 5/10 S A B C D T phase 2 (DFS) total_flow 15 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Phase 2 — DFS: Path S → A → B → D → T S \to A \to B \to D \to T S → A → B → D → T (via residual). S → A S \to A S → A : 2, A → B A \to B A → B : 2, B → D B \to D B → D saturated\ldots no. Try S → B → C → D → T S \to B \to C \to D \to T S → B → C → D → T . S → B S \to B S → B : 3, B → C B \to C B → C : 4, C → D C \to D C → D : 3, D → T D \to T D → T : 5. Bottleneck = 3 = 3 = 3 .
Step 16 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 10/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 5/6 Edge from node B to node D 5/5 Edge from node C to node D 3/3 Edge from node C to node T 10/10 Edge from node D to node T 8/10 S A B C D T phase 2 (DFS) total_flow 18 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Push 3. S → B S \to B S → B : 10/10 (saturated!). B → C B \to C B → C : 5/6. C → D C \to D C → D : 3/3 (saturated!). D → T D \to T D → T : 8/10. Total = 18 = 18 = 18 .
Step 17 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 10/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 5/6 Edge from node B to node D 5/5 Edge from node C to node D 3/3 Edge from node C to node T 10/10 Edge from node D to node T 8/10 S A B C D T phase 2 (DFS) total_flow 18 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T 3 State Phase 2 — DFS 2: S → B S \to B S → B saturated. Try S → A S \to A S → A (residual 2). A → B A \to B A → B : 2, B → C B \to C B → C : 1, but C → T C \to T C → T saturated and C → D C \to D C → D saturated. A → B → D → T A \to B \to D \to T A → B → D → T ? B → D B \to D B → D saturated. Dead end. Blocking flow done.
Step 18 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 10/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 5/6 Edge from node B to node D 5/5 Edge from node C to node D 3/3 Edge from node C to node T 10/10 Edge from node D to node T 8/10 S A B C D T phase 3 (BFS fail) total_flow 18 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T unreachable State Phase 3 — BFS: S S S can reach A A A (residual 2). From A A A : A → B A \to B A → B (2). From B B B : B → C B \to C B → C (1). From C C C : C → T C \to T C → T saturated. No path to T T T in residual ⇒ \Rightarrow ⇒ BFS fails. Algorithm terminates.
Step 19 / 19 Arrowhead (forward) Arrowhead (reverse) Edge from node S to node A 8/10 Edge from node S to node B 10/10 Edge from node A to node B 0/2 Edge from node A to node C 8/8 Edge from node B to node C 5/6 Edge from node B to node D 5/5 Edge from node C to node D 3/3 Edge from node C to node T 10/10 Edge from node D to node T 8/10 S A B C D T S-side T-side phase done total_flow 18 level_S 0 level_A 1 level_B 1 level_C 2 level_D 2 level_T unreachable State Max flow = 18 = 18 = 18 . Min-cut: reachable from S S S in residual = { S , A , B } = \{S,A,B\} = { S , A , B } vs { C , D , T } \{C,D,T\} { C , D , T } . Cut edges (red): A → C A \to C A → C (8) + B → C B \to C B → C (6) + B → D B \to D B → D (5). Dinic's found this in 2 BFS phases.