02

Min-Cut

Chapter 2 • Advanced

90 min

Min-Cut

Max-Flow Min-Cut Theorem

Maximum flow = Minimum cut capacity

Finding Min-Cut

After running max-flow, min-cut is the set of vertices reachable from source in residual graph.

python.js
def min_cut(graph, source, sink):
    """Find minimum cut"""
    n = len(graph)
    residual = [row[:] for row in graph]
    
    # Run max-flow
    max_flow = ford_fulkerson_with_residual(residual, source, sink)
    
    # Find reachable vertices from source
    visited = [False] * n
    queue = deque([source])
    visited[source] = True
    
    while queue:
        u = queue.popleft()
        for v in range(n):
            if not visited[v] and residual[u][v] > 0:
                visited[v] = True
                queue.append(v)
    
    # Min-cut: edges from visited to unvisited
    cut_edges = []
    for u in range(n):
        if visited[u]:
            for v in range(n):
                if not visited[v] and graph[u][v] > 0:
                    cut_edges.append((u, v))
    
    return max_flow, cut_edges

Practice Problems

  1. Find minimum cut
  2. Count minimum cuts
  3. Applications in image segmentation