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
- Find minimum cut
- Count minimum cuts
- Applications in image segmentation