Purpose: Malhotra-Pramodh Kumar-Maheshwari (1978) — compute a blocking flow in instead of Dinic’s , giving an maximum flow algorithm. The best choice for dense graphs.

The Idea: potentials

Inside a level graph, define for each vertex

with and counting only outgoing and incoming capacity respectively.

The vertex with minimum potential can have all of pushed through it immediately: push forward to greedily, and pull backward from greedily. Because has the smallest potential, no vertex downstream or upstream can block the push — every one of them can absorb at least that much.

After the push, is saturated and gets deleted, along with any vertex whose potential drops to zero.

Algorithm

BlockingFlow(level graph L):
    compute p(v) for all v
    while s and t are still present:
        v* = argmin p(v)
        if p(v*) == 0: delete v*, update potentials; continue
        push p(v*) forward from v* to t   (greedy, saturating edges in order)
        pull p(v*) backward from v* to s
        update potentials of affected vertices
        delete v* and any vertex with p = 0

Complexity

Per blocking flow:

  • Each vertex is deleted once: deletions.
  • Each push/pull either saturates an edge (at most times total) or exhausts (at most once per vertex per phase, per deletion).
  • Potential updates cost per deleted vertex with an adjacency matrix.

When MPM beats Dinic

GraphDinicMPM
Sparse, — tie
Dense, MPM wins
Unit capacitiesDinic wins
Bipartite matchingDinic wins

So MPM is the right tool exactly when the graph is dense and capacities are large — the same regime where push-relabel with the highest-label rule also shines, and push-relabel is usually faster in practice.

Reality check

Dinic’s bound is famously pessimistic; on real inputs it behaves far better. Unless a problem is specifically constructed to defeat it (dense graph, adversarial capacities), write Dinic. MPM’s value is the guarantee.

Variants / Use Cases

  • Dinic — the blocking-flow framework MPM slots into
  • Maximum Flow — the topic page
  • Karzanov — the earlier preflow algorithm with a similar goal
  • Push-relabel — the modern choice, generally faster in practice