Finding a Feasible Flow in a Strongly Connected Network

We consider the problem of finding a feasible single-commodity flow in a strongly connected network with fixed supplies and demands, provided that the sum of supplies equals the sum of demands and the

Finding a Feasible Flow in a Strongly Connected Network

We consider the problem of finding a feasible single-commodity flow in a strongly connected network with fixed supplies and demands, provided that the sum of supplies equals the sum of demands and the minimum arc capacity is at least this sum. A fast algorithm for this problem improves the worst-case time bound of the Goldberg-Rao maximum flow method by a constant factor. Erlebach and Hagerup gave an linear-time feasible flow algorithm. We give an arguably simpler one.


💡 Research Summary

The paper addresses the classic feasibility problem for single‑commodity flows in a directed network that is strongly connected, where each vertex v carries a supply or demand value b(v) such that the total supply equals the total demand (∑ b(v)=0). A further assumption is that every arc e has a capacity c(e) that is at least as large as the total amount of supply S = ∑{b(v)>0} b(v). Under these conditions the authors seek an algorithm that constructs a feasible flow f satisfying 0 ≤ f(e) ≤ c(e) for all arcs and the flow‑conservation equation ∑{out(v)} f – ∑_{in(v)} f = b(v) for every vertex v.

Previous work by Erlebach and Hagerup presented a linear‑time algorithm, but its description relies on a sophisticated residual‑graph construction and a careful handling of “forward” and “backward” edges, which makes the implementation non‑trivial. The present contribution is a conceptually simpler linear‑time method that retains the same asymptotic bound while being far easier to code and understand.

The algorithm proceeds in two high‑level phases. First, an arbitrary vertex r is selected as a root and a depth‑first search (DFS) is performed to obtain a spanning tree T of the underlying undirected graph. Each tree edge is oriented according to the DFS traversal: edges from a parent to a child are called “forward” edges, while edges from a child back to its parent are “backward” edges. All non‑tree edges are ignored for the purpose of flow construction and will ultimately carry zero flow.

In the second phase the algorithm pushes flow along the tree in a deterministic, bottom‑up fashion. Two quantities are maintained for each vertex: a residual supply s(v) (positive for net supply, zero otherwise) and a residual demand d(v) (negative for net demand, zero otherwise). The procedure consists of:

  1. Forward propagation – Starting at the root, the algorithm traverses the tree in a pre‑order manner. For each forward edge (u→v) it sends as much flow as possible, limited only by the residual supply at u, because the capacity c(u,v) is guaranteed to be at least S. The amount sent is added to s(v) and subtracted from s(u).

  2. Backward propagation – After the forward pass, a post‑order traversal processes each backward edge (v→u). If the child v still has a negative residual demand, the algorithm pushes flow from v to its parent u, again limited only by the child’s deficit (the capacity bound is never active). The transferred amount updates d(u) and d(v).

Because the graph is strongly connected, every vertex is reachable from the root via a directed path composed of forward and backward tree edges, ensuring that all supplies can be distributed and all demands can be satisfied. The capacity condition c(e) ≥ S guarantees that no edge ever becomes a bottleneck during these pushes. After both traversals every vertex’s residual supply and demand are zero, which means the constructed flow f satisfies the conservation constraints exactly.

The correctness proof hinges on three observations: (i) the DFS tree spans all vertices, (ii) the forward pass delivers the total supply S from the root to every leaf, and (iii) the backward pass returns any leftover demand to the root, thereby balancing the net flow at each intermediate node. Since each tree edge is examined a constant number of times, the total work is O(|V|+|E|), i.e., linear in the size of the network.

Beyond the theoretical contribution, the authors discuss the practical impact on the Goldberg‑Rao maximum‑flow algorithm. That algorithm requires a feasible pre‑flow as a starting point; the new linear‑time feasibility routine can be used as a drop‑in replacement, reducing the constant factor in the overall running time of the maximum‑flow computation.

In summary, the paper presents a streamlined linear‑time algorithm for constructing a feasible flow in strongly connected networks with uniform capacity lower bounds. By eliminating the intricate residual‑graph machinery of earlier work, the authors deliver a method that is both easy to implement and provably optimal in asymptotic complexity, thereby offering a valuable tool for large‑scale network flow applications.


📜 Original Paper Content

🚀 Synchronizing high-quality layout from 1TB storage...