Fact-checked by Grok 2 weeks ago

Dinic's algorithm

Dinic's algorithm (also known as Dinitz's algorithm) is a strongly polynomial-time algorithm for computing the maximum flow in a capacitated, directed from a source vertex to a sink vertex. Developed by Soviet mathematician Yefim A. Dinic and published in 1970, it addresses the by iteratively constructing a level graph—a layered of the residual network based on shortest-path distances from the source—and then finding a blocking flow that saturates all paths in this level graph before advancing to the next phase. The algorithm begins with zero flow and uses (BFS) to build the level graph in each phase, assigning levels to vertices based on the minimum distance from the source in the residual network. It then employs (DFS) on this level graph, restricted to edges that connect consecutive levels (admissible edges), to push as much flow as possible through multiple augmenting paths simultaneously until no more augmentations are feasible within the current layering. This phase-based approach ensures that the shortest augmenting path length strictly increases with each phase, bounding the number of phases to at most V, where V is the number of vertices. In terms of time complexity, Dinic's algorithm achieves O(V^2 E) time for general networks with V vertices and E edges, where each phase requires O(E) time for BFS and O(VE) time for finding the blocking flow via DFS traversals. For unit-capacity networks, it runs in O(\min(V^{2/3}, E^{1/2}) E) time, making it particularly efficient for dense graphs or those with small capacities. Subsequent improvements, such as those incorporating dynamic trees by Sleator and Tarjan in 1980, reduce the general complexity to O(V E \log V). Dinic's algorithm is notable for its modularity, which has inspired variants like the push-relabel method and its application in solving related problems, such as bipartite matching via flow reduction. It remains a cornerstone in network flow theory due to its balance of theoretical guarantees and practical performance, outperforming earlier augmenting-path algorithms like Edmonds-Karp in worst-case scenarios.

Background

Maximum Flow Problem

The maximum flow problem seeks to determine the maximum rate at which some commodity can be sent from a source to a in a , subject to capacity constraints on the edges. This problem models scenarios such as transporting goods through a transportation network or routing data in communication systems, where the goal is to maximize the total throughput without violating edge limits. Central to the problem are two distinguished vertices: the source s, from which originates, and the t, at which flow arrives. The value of a , denoted |f|, is defined as the total outflow from s (equivalently, the total inflow to t), representing the net amount of commodity transferred. A valid flow must satisfy two key constraints: for every from u to v, the flow f(u,v) cannot exceed the edge's capacity c(u,v); and at every intermediate (neither s nor t), the total incoming flow equals the total outgoing flow, ensuring of the commodity. Formally, given a G = (V, E) with vertex set V and edge set E, the function is c: V \times V \to \mathbb{R}^+, where c(u,v) = 0 if no edge exists from u to v, and the flow function is f: V \times V \to \mathbb{R}^+, satisfying $0 \leq f(u,v) \leq c(u,v) for all u, v \in V. The is to find a flow f that maximizes |f| = \sum_{v \in V} f(s,v) while adhering to these and constraints. This formulation originates from the work of and Fulkerson, who introduced the problem in their seminal 1956 paper on maximal flows in networks.

Flow Networks

A flow network is formally defined as a directed graph G = (V, E), where V is the of vertices and E \subseteq V \times V is the set of directed edges, equipped with a capacity function c: E \to \mathbb{R}_{\geq 0} that assigns a nonnegative c(e) to each e \in E, representing the maximum amount of flow that can traverse that edge. This structure models scenarios where commodities or resources are transported from origins to destinations through interconnected nodes subject to edge-specific limits. The network designates two distinguished vertices: the source s \in V, characterized by having no incoming flow (i.e., the net flow into s is zero), and the sink t \in V, characterized by having no outgoing flow (i.e., the net flow out of t is zero). These vertices serve as the starting point for flow injection and the endpoint for flow extraction, respectively, with all other vertices v \in V \setminus \{s, t\} adhering to flow conservation. A flow f: E \to \mathbb{R} in the network assigns a real value to each , interpreted as the rate of along that . An admissible f is one that satisfies two key properties: (i) the capacity constraint, requiring $0 \leq f(e) \leq c(e) for every e \in E, ensuring no exceeds its or carries negative ; and (ii) the conservation of , requiring that for every v \in V \setminus \{s, t\}, the total incoming equals the total outgoing , formally \sum_{u: (u,v) \in E} f(u,v) = \sum_{w: (v,w) \in E} f(v,w). The value of such a is the net amount leaving the source (or equivalently, entering the sink), given by |f| = \sum_{w: (s,w) \in E} f(s,w). Central to analyzing and augmenting flows is the residual graph G_f = (V, E_f), derived from G with respect to a given admissible flow f, where E_f = \{(u,v) \in V \times V \mid c_f(u,v) > 0\} and the residual capacity is defined as c_f(u,v) = c(u,v) - f(u,v) + f(v,u) for all u, v \in V. This formulation accounts for potential flow reversals: if flow has been sent from u to v, the term +f(v,u) (which equals the backward flow component) enables "undoing" part of that flow by adding a residual edge from v to u, effectively adjusting the net flow without violating capacities. The residual graph thus captures the remaining potential for increasing the overall flow from s to t. This framework underpins the , which aims to find an admissible flow of maximum value in .

Origins

Dinic's algorithm was invented by the Soviet mathematician Yefim A. Dinic in 1970. The algorithm was first published in Russian as "Algoritm resheniya zadachi o maksimal'ном potoke v seti s ocenkoj stepeni" in Doklady Akademii Nauk SSSR, volume 191, number 1, pages 49–52, and later translated into English as "Algorithm for Solution of a Problem of Maximum Flow in a Network with Power Estimates" in Soviet Mathematics Doklady, volume 11, pages 1277–1280. The development occurred amid growing interest in efficient algorithms for the in flow networks, a fundamental challenge in . Dinic's work was motivated by limitations in the Ford–Fulkerson method, introduced in 1956, which relies on augmenting paths but lacks a guaranteed polynomial-time bound in the worst case, potentially leading to exponential running times on certain inputs. To address this, Dinic incorporated to build layered structures in the residual graph, allowing for the efficient identification and saturation of multiple paths simultaneously through blocking flow computations. This innovation built upon emerging ideas for refining path selection in flow algorithms, particularly the use of BFS to prioritize shortest augmenting paths, a concept that would be independently formalized shortly thereafter in the of 1972. By providing a strongly of O(V²E)—where V is the number of vertices and E the number of edges—Dinic's algorithm marked a significant advancement, establishing a reliable bound independent of edge capacities and influencing subsequent research in network flows.

Developments and Influences

Following the publication of the original Russian paper in 1970, an English translation by R. F. Rinehart appeared in the same year in Soviet Mathematics Doklady, facilitating its wider dissemination and adoption in Western academic and research communities. This translation, along with analyses in subsequent works, helped bridge the gap for non-Russian speakers, leading to rapid integration into the study of network flows. Dinic's algorithm significantly influenced subsequent maximum flow research, particularly through its layered (level graph) approach, which inspired similar hierarchical structures in later algorithms. For instance, the push-relabel algorithm developed by and Tarjan in 1988 explicitly builds on layering ideas from Dinic and Karzanov, using dynamic distance labels to guide flow augmentation in a manner analogous to level graphs. Additionally, Even and Tarjan's 1975 paper analyzed and extended Dinic's method for unit-capacity networks, demonstrating its O(\sqrt{n} m) time bound for bipartite matching and establishing it as a foundational for testing in graphs. Key refinements in the 1980s enhanced the efficiency of blocking flow computations in Dinic's framework. Cherkassky's 1983 algorithm improved the to O(V^2 E^{1/2}) for certain networks by using advanced data structures for path finding in level graphs. Independently, Galil and Tarjan's 1984 variant provided a simplified approach to computing blocking flows, maintaining the original O(VE) time per phase. Further advancements incorporated dynamic trees by Sleator and Tarjan in 1983, reducing the overall complexity to O(VE \log V). By the 1980s, Dinic's algorithm had become a standard topic in literature, appearing in key texts on network flows and graph algorithms due to its strong polynomial-time guarantees and practical performance. It also found implementation in established software libraries, such as LEDA, which incorporates a Galil-Naamad variant of Dinic's method for robust maximum flow computations.

Algorithm Description

Level Graph Construction

In Dinic's algorithm, the level graph construction serves as a preprocessing step in each phase to organize the residual graph into layers based on shortest path distances from the source, facilitating efficient discovery of multiple augmenting paths. This process begins with a (BFS) initiated from the source vertex s in the current residual graph G_f, where edges with positive residual capacity are considered. The BFS assigns a level l(v) to each vertex v, defined as the shortest path distance from s to v in G_f, with l(s) = 0. Vertices unreachable from s receive infinite levels, and the search terminates if the t is unreachable, indicating that the maximum flow has been achieved. Each such BFS traversal requires O(|V| + |E|) time, where |V| is the number of vertices and |E| is the number of edges in the . The level graph, denoted G_f^l, is then derived as a subgraph of G_f consisting solely of edges (u, v) where l(v) = l(u) + 1 and the residual capacity is positive. This restriction ensures that all paths in G_f^l from s to t are of minimal length in the original graph and that the graph is acyclic, as levels strictly increase along any path. By confining edges to those spanning exactly one level, the level graph directs flow strictly forward through successive layers, preventing cycles and backtracking during subsequent path-finding operations. This layering mechanism is repeated in multiple phases until no augmenting path exists to t, with each phase updating the residual graph after computing a blocking flow in the current level graph. The level graph's structure partitions the network into ordered layers, enabling the algorithm to explore and saturate multiple disjoint shortest paths in parallel, which enhances efficiency over path-by-path augmentation methods.

Blocking Flow Computation

In Dinic's algorithm, the blocking flow computation occurs within the level graph, a directed acyclic subgraph of the residual graph consisting of edges that connect vertices at consecutive levels. A blocking flow in this graph is a feasible such that no augmenting exists from s to the t relative to it, meaning every possible from s to t in the level graph contains at least one saturated edge from this . The computation proceeds via repeated depth-first searches (DFS) initiated from the source s, traversing only level-increasing edges to identify and saturate paths to t. In each DFS, flow is pushed along the discovered path up to the minimum residual capacity of its edges, after which the path is updated in the residual graph by reducing capacities forward and adding backward edges. To efficiently explore multiple paths, the DFS maintains a through parent pointers, which link each visited to its predecessor in the search . When a reaches t, augmentation occurs, and the search backtracks; if a subtree rooted at a becomes blocked (no unsaturated outgoing edges lead to a viable to t), the algorithm advances to the next unexplored child edge from that vertex, continuing the search until all branches are exhausted. This iterative DFS process terminates when no further path from s can reach t in the current level graph, ensuring the blocking flow saturates all possible shortest augmenting paths. Multiple DFS calls per phase collectively find a maximal set of edge-disjoint paths, fully blocking the level graph without requiring exhaustive enumeration.

Procedure and Implementation

Overall Steps

Dinic's algorithm initializes the flow to zero on all edges of the given flow network, starting with an empty residual graph based on the initial capacities. The algorithm proceeds in a series of phases within a main loop. In each phase, it first constructs a level graph of the current residual graph using breadth-first search (BFS) from the source vertex s, where each vertex is assigned a level corresponding to the length of the shortest path from s to that vertex; this level graph includes only edges that connect vertices whose levels differ by exactly one. If the BFS does not reach the sink vertex t, the algorithm terminates, as no augmenting path exists, and the current total flow is the maximum flow value. Otherwise, it computes a blocking flow in the level graph—a maximal flow that saturates every path from s to t in this graph—using depth-first search traversals as a subroutine. This blocking flow is then added to the overall flow, and the residual capacities are updated by adjusting the forward and backward edges accordingly. Each phase advances the flow by saturating all shortest augmenting paths in the current graph, ensuring progress toward the maximum . The process repeats with a new level graph until termination. The number of such phases is at most |V| - 1, where |V| is the number of vertices, because the shortest path lengths from s to unsaturated vertices strictly increase with each phase.

Data Structures and Pseudocode

Dinic's algorithm requires specific data structures to efficiently represent the and manage the capacities during execution. The is typically stored using , where each maintains a list of outgoing in both the original and the . Each structure includes fields for the target , , current , and a to the reverse to enable quick updates when augmenting paths are found. A level array, denoted as l[], stores the shortest path distances from the source to each in the current level . Additionally, an of iterators or current pointers (often called ptr[] or similar) tracks the advancement position in each 's during DFS traversals, ensuring that previously explored are not revisited in the same blocking , which optimizes the search for multiple augmenting paths. When augmenting flow along a , the residual graph is updated by reducing the residual on forward s and increasing it on corresponding reverse s. For each forward from u to v with augmented flow f(u,v), the reverse from v to u receives an additional of f(u,v), allowing for potential flow cancellation in future iterations. This bidirectional pairing is maintained in the adjacency lists from the outset, with reverse s initialized to zero . The overall for these structures—adjacency lists for O(|E|) s (including reverses, so O(2|E|)), the level array for O(|V|), and the pointer array for O(|V|)—is O(|V| + |E|). The for Dinic's algorithm outlines three key procedures: BFS to construct the , DFS to compute blocking flows by pushing along level-respecting paths, and the main loop to repeat phases until saturation. These implement the core logic of building layered networks and finding maximal flows within them without beyond levels. The BFS procedure assigns levels via shortest-path distances in the :
BFS(s):
    for each vertex v:
        l[v] = -1
    l[s] = 0
    queue Q = empty
    enqueue s to Q
    while Q not empty:
        u = dequeue Q
        for each adjacent edge to v from u with positive [residual capacity](/page/residual):
            if l[v] == -1:
                l[v] = l[u] + 1
                enqueue v to Q
    return true if l[t] != -1 else false
This builds the level graph by exploring only unsaturated edges. The DFS procedure recursively pushes the minimum possible flow along a path from the current , respecting levels and updating pointers:
DFS(u, min_flow, l, ptr):
    if u == t:
        return min_flow
    for i = ptr[u] to end of adj[u]:
        ptr[u] = i  // advance pointer
        v = target of edge i from u
        if l[v] == l[u] + 1 and residual capacity (u, v) > 0:
            pushed = DFS(v, min(min_flow, residual(u, v)), l, ptr)
            if pushed > 0:
                augment [flow](/page/Flow) by pushed along the [path](/page/Path)
                residual(u, v) -= pushed
                residual(v, u) += pushed  // update reverse
                return pushed
    l[u] = -1  // mark as unlevelled for optimization
    return 0
Multiple calls to DFS from the source compute a blocking flow in the current level graph. The main procedure integrates these to compute the maximum flow:
Dinic(s, t):
    max_flow = 0
    while BFS(s) is true:
        ptr = [0 for each vertex]  // reset pointers
        while true:
            pushed = DFS(s, ∞, l, ptr)
            if pushed == 0:
                break
            max_flow += pushed
    return max_flow
This loop repeats level graph construction and blocking flow computation until no path reaches the sink.

Analysis

Time Complexity

Dinic's algorithm has a time complexity of O(V^2 E) for general flow networks, where V is the number of vertices and E is the number of edges. This bound arises from the algorithm's phase-based structure, where each phase builds a level graph via (BFS) and computes a blocking flow using (DFS) traversals. The algorithm executes at most V-1 phases. In each phase, the shortest path distance from the source to the sink in the residual graph strictly increases by at least 1, and this distance cannot exceed V-1. Moreover, each phase saturates the outgoing edges of at least one in the level graph, ensuring progress toward eliminating augmenting paths of the current shortest length. Per phase, the BFS to construct the level graph takes O(V + E) time, as it traverses all vertices and edges in the residual graph. The subsequent blocking flow computation requires O(V E) time. Although each individual DFS traversal explores O(E) edges, the total work across all DFS calls in a phase—accounting for advances along edges, retreats during backtracking, and augmentations—is bounded by O(V E), since the level graph is acyclic and each edge is examined at most O(V) times in aggregate due to the limited depth and pointer optimizations in the DFS implementation. Combining these, the total runtime is O(V \cdot (V + E + V E)) = O(V^2 E). This improves upon the 's O(V E^2) complexity, which relies on O(V E) sequential augmentations each taking O(E) time to find a single path via ; Dinic's use of blocking flows enables multiple simultaneous augmentations per phase, drastically reducing the number of iterations needed. In special cases like unit-capacity networks, the algorithm achieves tighter bounds such as O(\min(V^{2/3} E, E^{3/2})) .

Special Cases and Optimizations

In unit-capacity networks, where all edge capacities are one, benefits from a reduced number of phases in level graph construction, leading to a of O(\min(|V|^{2/3}, |E|^{1/2}) |E|). This improvement arises because the shortest path distances in the residual graph grow more rapidly, bounding the phases by O(\min(|V|^{2/3}, |E|^{1/2})), while each blocking flow phase takes O(|E|) time. For bipartite graphs, Dinic's algorithm applied to unit-capacity networks for maximum matching reduces to the Hopcroft-Karp algorithm, achieving O(|V|^{1/2} |E|) time. This equivalence stems from the layered structure aligning with multiple shortest augmenting paths in bipartite matching, where the number of phases is O(|V|^{1/2}). Further optimizations employ dynamic trees to accelerate blocking flow computation within each phase. By representing the level graph's trees and enabling fast path queries and updates, the time per phase drops to O(|E| \log |V|), yielding an overall complexity of O(|V| |E| \log |V|). This enhancement, introduced via the link-cut tree data structure, supports efficient linking and cutting of paths during DFS traversals. Parallel variants of Dinic's algorithm target multi-core architectures by distributing the DFS-based blocking flow searches across threads, improving for dense graphs. These implementations the traversal of advance vertices while maintaining level graph integrity, achieving speedups on multi-core processors for large networks. In networks with large edge capacities, the worst-case remains O(|V|^2 |E|), as the phase count is bounded by |V|-1 independently of capacities. However, practical performance improves due to fewer effective phases, as high-capacity edges allow larger augmentations per blocking , reducing iterations in real-world instances.

Example

Network Illustration

To illustrate the setup for applying Dinic's algorithm, consider a simple directed flow network with 5 vertices labeled 1 through 5, where vertex 1 serves as the source s and vertex 5 as the sink t. The network consists of directed edges connecting the source to intermediate vertices and ultimately to the sink, each assigned a positive integer capacity representing the maximum flow allowable along that edge. The structure forms multiple paths from s to t, including routes through vertices 2 and 3 as intermediaries, and vertex 4 as a convergence point before the sink. The edges and their capacities are as follows:
FromToCapacity
124
133
242
253
343
452
In the initial , the forward capacities match the original edge capacities, while backward capacities are zero for all edges, as no has yet been assigned. This , as a model for problems, has a maximum of 5 from to .

Step-by-Step Execution

To demonstrate the operation of Dinic's algorithm on the example network illustrated earlier, the process begins with an initial zero flow in the residual graph. The algorithm iterates through phases until no path from source node 1 to sink node 5 exists in the residual graph. In the first phase, a breadth-first search (BFS) constructs the level graph by assigning distances from the source as levels: [0, 1, 1, 2, 2] for nodes 1 through 5, respectively. This level graph ensures that all edges point from level i to level i+1. A blocking flow is then computed within this level graph using depth-first searches to find and augment multiple vertex-disjoint paths from the source to the sink, saturating at least one edge on every possible path in the level graph. This augments flow by 3 units along the path 1-2-5 (the only path in this level graph). The residual graph is updated by reducing forward capacities along the augmented path and increasing reverse capacities accordingly. A second phase follows, as an s-t still exists in the updated residual graph. BFS recomputes the levels: [0, 1, 1, 2, 3] for nodes 1 through 5. The blocking flow computation again finds augmenting paths in this new level graph, augmenting a total of 2 units along paths such as 1-3-4-5 (e.g., carrying 2 units if explored first, limited by the in the residual graph) or 1 unit each along 1-2-4-5 and 1-3-4-5 (depending on the order of DFS traversals), reaching 5 overall. Residual capacities are updated once more. At this point, the residual graph has no remaining s-t , as confirmed by a final BFS that fails to reach the . The algorithm terminates with a maximum flow of 5.

Applications and Comparisons

Real-World Uses

Dinic's algorithm finds extensive application in bipartite matching problems, where it computes the by modeling the as a . In this setup, a connects to all vertices in one partite set with capacities, edges between the partite sets have infinite capacity, and the other partite set connects to a with capacities; the maximum flow value then equals the size of the maximum matching. This approach is particularly efficient for large-scale assignment tasks, such as job scheduling or in computing systems. In transportation and logistics, Dinic's algorithm optimizes the flow of across networks with constraints, such as assigning shipment volumes from warehouses to customers while respecting or limits. For instance, it has been applied to maximize flow in facilities, outperforming simpler max-flow methods by efficiently handling layered network structures to minimize bottlenecks in supply chains. Similarly, it aids in urban optimization by modeling capacities and computing maximum flows to reduce delays. For , Dinic's algorithm supports graph-cut methods by solving the in a where pixels represent nodes, and weights reflect similarity measures between neighboring pixels. The source and represent foreground and background labels, respectively, allowing the max-flow to the effectively. This has been implemented in segmentation pipelines for high-resolution tasks, such as intervertebral disc separation in MRI scans. In , particularly VLSI routing, Dinic's algorithm addresses wire placement under capacity constraints by treating routing channels as flow networks, where nets are flows routed from pins to avoid . It computes maximum routable flows to ensure feasibility in multi-layer layouts, as seen in pin redistribution problems where it efficiently saturates paths in dense graphs. This application enhances overall chip performance by minimizing violations in wire length and timing.

Comparison with Other Algorithms

Dinic's algorithm offers significant improvements over the Edmonds-Karp algorithm, which implements the Ford-Fulkerson method using to find augmenting paths. While Edmonds-Karp has a of O(|V| |E|^2), Dinic's achieves O(|V|^2 |E|) by constructing level graphs and computing blocking flows in each phase, allowing multiple augmenting paths to be found simultaneously rather than one at a time. In practice, this makes Dinic's substantially faster, particularly for graphs with moderate to high edge densities, as blocking flows reduce the number of phases needed. Compared to the preflow-push algorithm developed by and Tarjan, Dinic's is generally simpler in structure and easier to implement, relying on explicit level graphs and DFS-based blocking flow searches rather than maintaining preflows and dynamic height labels. The worst-case of preflow-push is O(|V|^3), which outperforms Dinic's O(|V|^2 |E|) in dense graphs where |E| approaches |V|^2, but Dinic's holds an advantage in sparser networks due to fewer operations per phase. Preflow-push variants, such as those using highest-label selection, can further enhance practical performance on dense instances, though they increase . The FIFO variant of push-relabel, which processes vertices in first-in-first-out order, improves upon the basic preflow-push for practical but still requires careful management of active vertices and relabeling operations. Dinic's excels in sparse graphs, where its phase-based leverages the lower count more effectively, and is often favored in competitive programming settings for its optimal balance of asymptotic speed, practical runtime, and coding simplicity.

References

  1. [1]
    [PDF] Lecture 9 1 Efficient algorithms for max flow
    Oct 2, 2007 · In Dinic's algorithm we effectively saturate all the shortest paths at the same time. The running time of the algorithm depends on how fast we ...
  2. [2]
    Algorithm for Solution of a Problem of Maximum Flow in Networks ...
    PDF | On Jan 1, 1970, E A Dinitz published Algorithm for Solution of a Problem of Maximum Flow in Networks with Power Estimation | Find, read and cite all ...
  3. [3]
    [PDF] Augmenting Path Algorithms for Maximum Flow - Tim Roughgarden
    Jan 7, 2016 · Unlike the Edmonds-Karp algorithm, Dinic's algorithm enjoys a modularity that lends itself to optimized algorithms with faster running times.
  4. [4]
    [PDF] 1 Max flow
    Max flow is the maximum flow from a source to a sink in a directed graph, where the goal is to find the flow with the maximum value.
  5. [5]
    [PDF] 4. Lecture notes on flows and cuts 4.1 Maximum Flows
    Apr 6, 2017 · The main question is how much can be sent in this network. Here is a more formal definition of the maximum flow problem. We have a digraph.
  6. [6]
    MaxFlow
    A maximum flow is a flow that maximizes ∑v fsv. The maximum flow problem is to find a maximum flow given an input graph G, its capacities cuv, and the ...
  7. [7]
    [PDF] maximal flow through a network - lr ford, jr. and dr fulkerson
    MAXIMAL FLOW THROUGH A NETWORK. L. R. FORD, JR. AND D. R. FULKERSON. Introduction. The problem discussed in this paper was formulated by. T. Harris as follows ...
  8. [8]
    Algorithms for maximum network flow - SpringerLink
    E.A. Dinic, “Algorithm for solution of a problem of maximum flow in a network with power estimation”, Soviet Mathematics Doklady 11 (1970) 1277–1280. Google ...<|control11|><|separator|>
  9. [9]
    Network Flow and Testing Graph Connectivity | SIAM Journal on ...
    E. A. Dinic, Algorithm for solution of a problem of maximum flow in a network with power estimation, Soviet Math. Dokl., 11 (1970), 1277–1280. Google Scholar.
  10. [10]
    [PDF] Max Flow: polynomial-time algorithms
    DFS, push maximum flow through it. ○ Update the residual capacities ... Dinic's algorithm often performs better than. O(mn2) in practice. Claim: For a ...
  11. [11]
    [PDF] A Fast and Simple Algorithm for the Maximum Flow Problem R. K. ...
    Sep 19, 2007 · rules to push flow or by using dynamic trees. We describe such ... DINIC, E. A. 1970. Algorithm for Solution of a Problem of Maximum ...
  12. [12]
    Dinitz' Algorithm: The Original Version and Even's ... - SpringerLink
    This paper is devoted to the max-flow algorithm of the author: to its original version, which turned out to be unknown to non-Russian readers, and to its ...
  13. [13]
    [PDF] Lecture 11: Dinic's Algorithm Wed. October 1, 2014
    Oct 1, 2014 · Dinic's algorithm is a way of implementing the Edmonds-Karp # 2 algorithm mentioned in the Avrim's Network Flows II lecture notes.
  14. [14]
    Algorithm for solution of a problem of maximal flow in a network with ...
    Algorithm for solution of a problem of maximal flow in a network with power estimation · E. A. Dinic · Published 1970 · Engineering, Computer Science.
  15. [15]
    [PDF] 1 Dinitz's Algorithm - Cornell: Computer Science
    Dinitz's Algorithm improves the Edmonds-Karp Algorithm by discovering a blocking flow, which is in some sense a maximal set of shortest augmenting paths that ...
  16. [16]
    (PDF) Dinitz' Algorithm: The Original Version and Even's Version
    Aug 7, 2025 · In this paper, we prove two new results related to finding maximum flows in directed graphs and finding maximum matchings in bipartite graphs.
  17. [17]
    [PDF] ‣ max-flow and min-cut problems ‣ Ford–Fulkerson algorithm ...
    Nov 1, 2021 · Summary--This note discusses the problem of maximizing the rate of flow from one terminal to another, through a network which.
  18. [18]
    [PDF] Efficient implementation of Dinic's algorithm for maximum flow - TAU
    Let level(v) be the length of the shortest path from s to v in R. Dinic: find a blocking flow f' in L let f := f + f' and repeat. Theorem: f is a maximum flow ...
  19. [19]
    Maximum flow - Dinic's algorithm - CP-Algorithms
    Oct 15, 2024 · The algorithm consists of several phases. On each phase we construct the layered network of the residual network of . Then we find an arbitrary blocking flow ...Algorithm · Number of phases · Finding blocking flow · Unit networksMissing: original | Show results with:original
  20. [20]
    [PDF] The Dinitz, Hopcroft-Karp, and Push-Relabel Algorithms
    Sep 30, 2020 · These lecture notes present two closely related algorithms: Dinitz's blocking-flow algo- rithm for the maximum flow problem, ...
  21. [21]
    [PDF] Dinic's Algorithm | CS4820 Spring 2013 - Cornell: Computer Science
    Mar 6, 2013 · The overall structure of the algorithm is similar to Edmonds–Karp or Dinic. Blocking flows are found for level graphs of increasing depth. The ...
  22. [22]
    [PDF] Lecture Notes on Network Flow Algorithms
    using MA orderings presented above has a time complexity of O(n(m+nlog n)). ... Lemma 11.4 For unit capacity graphs, Dinic's algorithm takes O(min(m. 1. 2 ,n.
  23. [23]
    Efficient Maximum Flow Algorithms - Communications of the ACM
    Aug 1, 2014 · 10. Dinic, E.A. Algorithm for solution of a problem of maximum flow in networks with power estimation. Soviet Mathematical Docladi 11 (1970), ...Missing: affiliation | Show results with:affiliation
  24. [24]
    A fast parallel max-flow algorithm - ScienceDirect.com
    The parallel algorithm has two versions: one uses Floyd-Warsahl's (FW) algorithm to compute a tree of optimal-paths with respect to maximum “bottle-neck ...<|separator|>
  25. [25]
    Network Flow: Dinic's Algorithm | Baeldung on Computer Science
    May 31, 2023 · It was created in 1970 by computer scientist Yefim (Chaim) Dinic. ... Dinic's algorithm efficiently computes the maximum flow in a flow network.Missing: Steklov Institute
  26. [26]
    Maximum flow - Ford-Fulkerson and Edmonds-Karp - CP-Algorithms
    Apr 22, 2025 · A maximal flow is a flow with the maximal possible value. Finding this maximal flow of a flow network is the problem that we want to solve. In ...Missing: paper | Show results with:paper
  27. [27]
    Max Flow Problem Introduction - GeeksforGeeks
    Jul 23, 2025 · The max flow problem finds the maximum flow from a source to a sink in a network, subject to capacity constraints, in a single-source, single- ...
  28. [28]
    Dinic's Algorithm: Mastering Maximum Flow in Network Graphs
    Dinic's Algorithm, developed by Yefim Dinitz in 1970, is an efficient method for solving the maximum flow problem. It improves upon the Ford-Fulkerson method by ...Missing: Steklov Institute
  29. [29]
    Mathematical estimation for maximum flow of goods within a cross ...
    Sep 19, 2022 · This paper uses a series of max-flow algorithms, namely Ford Fulkerson, Edmond Karp, and Dinic's, to optimize the flow of goods between the ...
  30. [30]
    Optimization of Road Traffic Congestion in Urban Traffic Network ...
    Aug 4, 2025 · Dinic's algorithm is developed to figure out the maximum flow in a flow network. Traffic flow could be controlled based on the capacity of the ...Missing: logistics | Show results with:logistics
  31. [31]
  32. [32]
    Graph cut-based segmentation for intervertebral disc in human MRI
    The proposed algorithm builds upon the implementation of Dinic's algorithm (Dinic 1970), which operates on the principle of augmenting paths. It systematically ...
  33. [33]
    [PDF] A flow based approach to the pin redistribution problem for multi ...
    a large number of problem instance Dinic's algorithm will be faster than Ford and Fulkerson's algorithm; however, we were able to construct flow graphs for.
  34. [34]
    [PDF] Theoretical Improvements in Algorithmic Efficiency for Network Flow ...
    ABSTRACT. This paper presents new algorithms for the maximum flow problem, the Hitchcock transportation problem, and the general minimum-cost flow problem.
  35. [35]
    Maximum Flow - USACO Guide
    The Push-Relabel Algorithm is an alternative solution to finding the maximum flow. To find the maximum flow, we'll handle a preflow. The only difference between ...Missing: influence | Show results with:influence