Network Flow
Data Structures and Algorithms
Emory University
Jinho D. Choi
Network Flow
2
S
1
2
3
4
T
Network Flow
2
S
1
2
3
4
T
Each edge e is associated with a capacity c.
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
Maximum flow?
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
3
Maximum flow?
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
3
3
Maximum flow?
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
3
3
1
2
Maximum flow?
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
3
3
1
2
2
Maximum flow?
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
3
3
1
2
2
1+2
Maximum flow?
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
3
3
1
2
2
1+2
3
Maximum flow?
Network Flow
2
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Each edge e is associated with a capacity c.
Push as much flow f as possible from S to T.
f(e) ≤ c(e)
Σu f(u, v) = Σw f(v, w), where v ∉ {S, T}
3
3
1
2
2
1+2
3
Maximum flow? Optimum?
4
4 2
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
4
4 2
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
4
4 2
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
4
4 2
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
4
4 2
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
4
4 22 0
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
4
4 22 0
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
4
4 22 0
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
4
4 22 0
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
4
4 22 0
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
4
4 22 0
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
43
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
43
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
1
43
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
1
43
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
1
43
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
1
431
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
1
0
0
431
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
1
0
0
2
431
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
1
0
0
2
431
4 22 01
Ford-Fulkerson Algorithm
3
S
1
2
3
4
T
2
3
1
2
3
1
Find a path p from S to T, where ∀e 𝜖 p. r(e) = c(e) - f(e) > 0.
∀e 𝜖 p. c(e) = c(e) - min(f(p)).
MaxFlow = MaxFlow + min(f(p)).
2
0
0
2
1
0
0
2
No more
augmenting path!
MaxFlow Class
4
public class MaxFlow
{
private Map<Edge,Double> m_flows;
private double d_maxFlow;
public MaxFlow(Graph graph)
{
init(graph);
}
public void init(Graph graph)
{
m_flows = new HashMap<>();
d_maxFlow = 0;
for (Edge edge : graph.getAllEdges())
m_flows.put(edge, 0d);
}
}
MaxFlow Class
4
public class MaxFlow
{
private Map<Edge,Double> m_flows;
private double d_maxFlow;
public MaxFlow(Graph graph)
{
init(graph);
}
public void init(Graph graph)
{
m_flows = new HashMap<>();
d_maxFlow = 0;
for (Edge edge : graph.getAllEdges())
m_flows.put(edge, 0d);
}
}
MaxFlow Class
5
public void updateResidual(List<Edge> path, double flow)
{
for (Edge edge : path) updateResidual(edge, flow);
d_maxFlow += flow;
}
public void updateResidual(Edge edge, double flow)
{
Double prev = m_flows.get(edge);
if (prev == null) prev = 0d;
m_flows.put(edge, prev + flow);
}
public double getResidual(Edge edge)
{
return edge.getWeight() - m_flows.get(edge);
}
public double getMaxFlow()
{
return d_maxFlow;
}
MaxFlow Class
5
public void updateResidual(List<Edge> path, double flow)
{
for (Edge edge : path) updateResidual(edge, flow);
d_maxFlow += flow;
}
public void updateResidual(Edge edge, double flow)
{
Double prev = m_flows.get(edge);
if (prev == null) prev = 0d;
m_flows.put(edge, prev + flow);
}
public double getResidual(Edge edge)
{
return edge.getWeight() - m_flows.get(edge);
}
public double getMaxFlow()
{
return d_maxFlow;
}
MaxFlow Class
5
public void updateResidual(List<Edge> path, double flow)
{
for (Edge edge : path) updateResidual(edge, flow);
d_maxFlow += flow;
}
public void updateResidual(Edge edge, double flow)
{
Double prev = m_flows.get(edge);
if (prev == null) prev = 0d;
m_flows.put(edge, prev + flow);
}
public double getResidual(Edge edge)
{
return edge.getWeight() - m_flows.get(edge);
}
public double getMaxFlow()
{
return d_maxFlow;
}
FordFulkerson Class
6
private Subgraph getAugmentingPath(Graph graph, MaxFlow mf, 

Subgraph sub, int source, int target)
{
if (source == target) return sub;
Subgraph tmp;
for (Edge edge : graph.getIncomingEdges(target))
{
if (sub.contains(edge.getSource())) continue; // cycle
if (mf.getResidual(edge) <= 0) continue; // no residual
tmp = new Subgraph(sub);
tmp.addEdge(edge);
tmp = getAugmentingPath(graph, mf, tmp, source, edge.getSource());
if (tmp != null) return tmp;
}
return null;
}
FordFulkerson Class
6
private Subgraph getAugmentingPath(Graph graph, MaxFlow mf, 

Subgraph sub, int source, int target)
{
if (source == target) return sub;
Subgraph tmp;
for (Edge edge : graph.getIncomingEdges(target))
{
if (sub.contains(edge.getSource())) continue; // cycle
if (mf.getResidual(edge) <= 0) continue; // no residual
tmp = new Subgraph(sub);
tmp.addEdge(edge);
tmp = getAugmentingPath(graph, mf, tmp, source, edge.getSource());
if (tmp != null) return tmp;
}
return null;
}
Complexity?
FordFulkerson Class
7
public MaxFlow getMaximumFlow(Graph graph, int source, int target)
{
MaxFlow mf = new MaxFlow(graph);
Subgraph sub = new Subgraph();
double min;
while ((sub = getAugmentingPath(graph, mf, sub, source, target)) != null)
{
min = getMin(mf, sub.getEdges());
mf.updateResidual(sub.getEdges(), min);
}
return mf;
}
FordFulkerson Class
7
public MaxFlow getMaximumFlow(Graph graph, int source, int target)
{
MaxFlow mf = new MaxFlow(graph);
Subgraph sub = new Subgraph();
double min;
while ((sub = getAugmentingPath(graph, mf, sub, source, target)) != null)
{
min = getMin(mf, sub.getEdges());
mf.updateResidual(sub.getEdges(), min);
}
return mf;
}
FordFulkerson Class
7
public MaxFlow getMaximumFlow(Graph graph, int source, int target)
{
MaxFlow mf = new MaxFlow(graph);
Subgraph sub = new Subgraph();
double min;
while ((sub = getAugmentingPath(graph, mf, sub, source, target)) != null)
{
min = getMin(mf, sub.getEdges());
mf.updateResidual(sub.getEdges(), min);
}
return mf;
}
private double getMin(MaxFlow mf, List<Edge> path)
{
double min = mf.getResidual(path.get(0));
for (int i=1; i<path.size(); i++)
min = Math.min(min, mf.getResidual(path.get(i)));
return min;
}
2 2
2 2
Ford-Fulkerson: Backward Pushing
8
S
1
2
T1
2 2
2 2
Ford-Fulkerson: Backward Pushing
8
S
1
2
T1
2 2
2 2
Ford-Fulkerson: Backward Pushing
8
S
1
2
T1
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
1
0
1 0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
8
S
1
2
T10
1
1
0
1 0
1
2 2
2 2
Ford-Fulkerson: Backward Pushing
9
S
1
2
T1
2 2
2 2
Ford-Fulkerson: Backward Pushing
9
S
1
2
T1
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
1
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
1
2 2
2 21
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
1
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
10
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
1
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1 12
1
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1 12
1
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1 12
1
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
0
12
1
1
0
1
0
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
0
12
1
1
0
1
0
1
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
0
1
12
1
1
0
1
0
1
1
2
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
0
1
12
1
1
0
1
0
1
1
2
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
0
1
12
1
1
0
1
0
1
1
2
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
0
1
12
1
1
0
1
0
1
1
2
0 0
22
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
0
1
12
1
1
0
1
0
1
1
2
0 0
22
1
2 2
2 2
1
1
1
Ford-Fulkerson: Backward Pushing
9
S
1
2
T10
1
1
1
0
1
12
1
1
0
1
0
1
1
2
0 0
22
1
protected void updateBackward(Graph graph, Subgraph sub, MaxFlow mf, double min)
{
boolean found;
for (Edge edge : sub.getEdges())
{
found = false;
for (Edge rEdge : graph.getIncomingEdges(edge.getSource()))
{
if (rEdge.getSource() == edge.getTarget())
{
mf.updateResidual(rEdge, -min);
found = true; break;
}
}
if (!found)
{
Edge rEdge = graph.setDirectedEdge

(edge.getTarget(), edge.getSource(), edge.getWeight());
mf.updateResidual(rEdge, -min);
}
}
}
10
protected void updateBackward(Graph graph, Subgraph sub, MaxFlow mf, double min)
{
boolean found;
for (Edge edge : sub.getEdges())
{
found = false;
for (Edge rEdge : graph.getIncomingEdges(edge.getSource()))
{
if (rEdge.getSource() == edge.getTarget())
{
mf.updateResidual(rEdge, -min);
found = true; break;
}
}
if (!found)
{
Edge rEdge = graph.setDirectedEdge

(edge.getTarget(), edge.getSource(), edge.getWeight());
mf.updateResidual(rEdge, -min);
}
}
}
10
protected void updateBackward(Graph graph, Subgraph sub, MaxFlow mf, double min)
{
boolean found;
for (Edge edge : sub.getEdges())
{
found = false;
for (Edge rEdge : graph.getIncomingEdges(edge.getSource()))
{
if (rEdge.getSource() == edge.getTarget())
{
mf.updateResidual(rEdge, -min);
found = true; break;
}
}
if (!found)
{
Edge rEdge = graph.setDirectedEdge

(edge.getTarget(), edge.getSource(), edge.getWeight());
mf.updateResidual(rEdge, -min);
}
}
}
10
Max-Flow Min-Cut Theorem
11
Max-Flow Min-Cut Theorem
11
• S-T cut
Max-Flow Min-Cut Theorem
11
• S-T cut
- A set of edges whose removal disconnects S to T.
Max-Flow Min-Cut Theorem
11
• S-T cut
- A set of edges whose removal disconnects S to T.
- The capacity of a cut = Σ c(e), ∀e in the cut.
Max-Flow Min-Cut Theorem
11
S
1
2
3
4
T
4
2
3
1
2
3
4
2
• S-T cut
- A set of edges whose removal disconnects S to T.
- The capacity of a cut = Σ c(e), ∀e in the cut.
Max-Flow Min-Cut Theorem
11
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Minimum cut
• S-T cut
- A set of edges whose removal disconnects S to T.
- The capacity of a cut = Σ c(e), ∀e in the cut.
Max-Flow Min-Cut Theorem
11
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Minimum cut
• S-T cut
- A set of edges whose removal disconnects S to T.
- The capacity of a cut = Σ c(e), ∀e in the cut.
Max-Flow Min-Cut Theorem
11
S
1
2
3
4
T
4
2
3
1
2
3
4
2
vs.
Maximum flow
Minimum cut
• S-T cut
- A set of edges whose removal disconnects S to T.
- The capacity of a cut = Σ c(e), ∀e in the cut.
Max-Flow Min-Cut Theorem
11
S
1
2
3
4
T
4
2
3
1
2
3
4
2
3
3
1
2
2
3
3
vs.
Maximum flow
Minimum cut
• S-T cut
- A set of edges whose removal disconnects S to T.
- The capacity of a cut = Σ c(e), ∀e in the cut.
Finding Min-Cut
12
4
4 2
S
1
2
3
4
T
2
3
1
2
3
Finding Min-Cut
12
4
4 2
S
1
2
3
4
T
2
3
1
2
3
Finding Min-Cut
12
4
4 2
S
1
2
3
4
T
2
3
1
2
3
Finding Min-Cut
12
4
4 22 0
S
1
2
3
4
T
2
3
1
2
3
1
Finding Min-Cut
12
4
4 22 0
S
1
2
3
4
T
2
3
1
2
3
1
Finding Min-Cut
12
4
4 22 0
S
1
2
3
4
T
2
3
1
2
3
1
Finding Min-Cut
12
4
4 22 0
S
1
2
3
4
T
2
3
1
2
3
1
Finding Min-Cut
12
43
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
Finding Min-Cut
12
43
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
Finding Min-Cut
12
43
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
Finding Min-Cut
12
43
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
Finding Min-Cut
12
431
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
0
0
Finding Min-Cut
12
431
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
0
0
Finding Min-Cut
12
431
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
0
0
• Algorithm
Finding Min-Cut
12
431
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
0
0
• Algorithm
1. Find a path p from S to T, remove any edge e in p, and put e to a set C.
Finding Min-Cut
12
431
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
0
0
• Algorithm
1. Find a path p from S to T, remove any edge e in p, and put e to a set C.
2. Repeat #1 until no path is found, and return C.
Finding Min-Cut
12
431
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
0
0
• Algorithm
1. Find a path p from S to T, remove any edge e in p, and put e to a set C.
2. Repeat #1 until no path is found, and return C.
• How can we find a min-cut?
Finding Min-Cut
12
431
4 22 01
S
1
2
3
4
T
2
3
1
2
3
10
0
2
0
0
• Algorithm
1. Find a path p from S to T, remove any edge e in p, and put e to a set C.
2. Repeat #1 until no path is found, and return C.
• How can we find a min-cut?
- Instead of removing any edge in #1, remove an edge with the
minimum original (not residual) weight.
Min-Cut vs. Max-Flow
13
Min-Cut vs. Max-Flow
13
• Lemma 1
Min-Cut vs. Max-Flow
13
• Lemma 1
- There is no extra edge in the min-cut.
Min-Cut vs. Max-Flow
13
• Lemma 1
- There is no extra edge in the min-cut.
- Prove?
Min-Cut vs. Max-Flow
13
• Lemma 1
- There is no extra edge in the min-cut.
- Prove?
• Lemma 2
Min-Cut vs. Max-Flow
13
• Lemma 1
- There is no extra edge in the min-cut.
- Prove?
• Lemma 2
- All edges in the min-cut must be parts of augmenting paths.
Min-Cut vs. Max-Flow
13
• Lemma 1
- There is no extra edge in the min-cut.
- Prove?
• Lemma 2
- All edges in the min-cut must be parts of augmenting paths.
- Prove?
Min-Cut vs. Max-Flow
13
• Lemma 1
- There is no extra edge in the min-cut.
- Prove?
• Lemma 2
- All edges in the min-cut must be parts of augmenting paths.
- Prove?
• Lemma 3
Min-Cut vs. Max-Flow
13
• Lemma 1
- There is no extra edge in the min-cut.
- Prove?
• Lemma 2
- All edges in the min-cut must be parts of augmenting paths.
- Prove?
• Lemma 3
- Each edge in the min-cut is the minimum weighted edge in each
augmenting path.
Min-Cut vs. Max-Flow
13
• Lemma 1
- There is no extra edge in the min-cut.
- Prove?
• Lemma 2
- All edges in the min-cut must be parts of augmenting paths.
- Prove?
• Lemma 3
- Each edge in the min-cut is the minimum weighted edge in each
augmenting path.
- Prove?
Network Flow Using Simplex
14
S
1
2
4
3
T
2
2
Network Flow Using Simplex
14
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Network Flow Using Simplex
14
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Max-Flow
Network Flow Using Simplex
14
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
Max-Flow
Network Flow Using Simplex
14
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Max-Flow
Network Flow Using Simplex
14
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Subject to:
Max-Flow
Network Flow Using Simplex
14
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Subject to:
x1 ≤ 4
x2 ≤ 2
x3 ≤ 3
x4 ≤ 2
x2 - x1 ≤ 0
x4 - x3 ≤ 0
Max-Flow
Network Flow Using Simplex
15
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Network Flow Using Simplex
15
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Network Flow Using Simplex
15
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Maximize:
Network Flow Using Simplex
15
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Maximize: Subject to:
Network Flow Using Simplex
15
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Maximize: Subject to:
x7 + x8
Network Flow Using Simplex
15
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Maximize: Subject to:
x7 + x8 x3 - x1 ≤ 0
x4 + x5 - x2 - x6 ≤ 0
x6 + x7 - x3 - x4 ≤ 0
x8 - x5 ≤ 0
x1 ≤ 4
x2 ≤ 2
x3 ≤ 3
x4 ≤ 2
x5 ≤ 3
x6 ≤ 1
x7 ≤ 2
x8 ≤ 4
Network Flow Using Simplex
16
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Subject to:
x1 ≤ 4
x2 ≤ 2
x3 ≤ 3
x4 ≤ 2
x2 - x1 ≤ 0
x4 - x3 ≤ 0
Max-Flow
Network Flow Using Simplex
16
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Subject to:
x1 ≤ 4
x2 ≤ 2
x3 ≤ 3
x4 ≤ 2
x2 - x1 ≤ 0
x4 - x3 ≤ 0
Max-Flow Min-Cut
Network Flow Using Simplex
16
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Subject to:
x1 ≤ 4
x2 ≤ 2
x3 ≤ 3
x4 ≤ 2
x2 - x1 ≤ 0
x4 - x3 ≤ 0
Max-Flow Min-Cut
Minimize:
Network Flow Using Simplex
16
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Subject to:
x1 ≤ 4
x2 ≤ 2
x3 ≤ 3
x4 ≤ 2
x2 - x1 ≤ 0
x4 - x3 ≤ 0
Max-Flow Min-Cut
Minimize:
4x1 + 2x2 + 3x3 + 2x4
Network Flow Using Simplex
16
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Subject to:
x1 ≤ 4
x2 ≤ 2
x3 ≤ 3
x4 ≤ 2
x2 - x1 ≤ 0
x4 - x3 ≤ 0
Max-Flow Min-Cut
Minimize:
4x1 + 2x2 + 3x3 + 2x4
Subject to:
Network Flow Using Simplex
16
S
1
2
4
3
T
2
2
x1 x2
x3 x4
Maximize:
x2 + x4
Subject to:
x1 ≤ 4
x2 ≤ 2
x3 ≤ 3
x4 ≤ 2
x2 - x1 ≤ 0
x4 - x3 ≤ 0
Max-Flow Min-Cut
Minimize:
4x1 + 2x2 + 3x3 + 2x4
Subject to:
x1 + y1 ≥ 1
x3 + y3 ≥ 1
x2 - y1 ≥ 0
x4 - y3 ≥ 0
Network Flow Using Simplex
17
S
1
2
3
4
T
4
2
3
1
2
3
4
2
Network Flow Using Simplex
17
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Network Flow Using Simplex
17
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Minimize:
Network Flow Using Simplex
17
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Minimize: Subject to:
Network Flow Using Simplex
17
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Minimize: Subject to:
4x1 + 2x2 + 3x3 + 2x4 +
3x5 + x6 + 2x7 + 4x8
Network Flow Using Simplex
17
S
1
2
3
4
T
4
2
3
1
2
3
4
2
x1
x3
x6
x7
x2
x5
x8
x4
Minimize: Subject to:
4x1 + 2x2 + 3x3 + 2x4 +
3x5 + x6 + 2x7 + 4x8
x1 + y1 ≥ 1
x2 + y2 ≥ 1
x3 - y1 + y3 ≥ 0
x4 - y2 + y3 ≥ 0
x5 - y2 + y4 ≥ 0
x6 - y3 + y2 ≥ 0
x7 - y3 ≥ 0
x8 - y4 ≥ 0

More Related Content

PDF
NUMERICAL METHODS WITH MATLAB : bisection,mueller's,newton-raphson,false poin...
PDF
Piano with Ray Charles
DOCX
Unit 2 analysis of continuous time signals-mcq questions
PDF
Home work II
PDF
Network flow problems
PDF
St. john class_ix
PPTX
Laplace periodic function
PDF
LP Duality
NUMERICAL METHODS WITH MATLAB : bisection,mueller's,newton-raphson,false poin...
Piano with Ray Charles
Unit 2 analysis of continuous time signals-mcq questions
Home work II
Network flow problems
St. john class_ix
Laplace periodic function
LP Duality

What's hot (20)

PDF
Bab 4 Semester 3
PPTX
Minimum cost maximum flow
PPT
Admission in India
PPTX
Volume of solids k todd
PPT
Flow Network Talk
PPTX
Matrix of linear transformation
PPT
Jaimin chp-5 - network layer- 2011 batch
PPTX
Fourier integral of Fourier series
PPT
Maximum flow
PDF
ゲーム理論BASIC 演習37 -3人ゲームの混合戦略ナッシュ均衡を求める-
PDF
REMEDIAL MATHAMETICS PHARM D 1ST YEAR FORMULA'S
PDF
07122555 0937185627
PPTX
Fourier integral
PDF
SPSF03 - Numerical Integrations
PPTX
All pair shortest path by Sania Nisar
PPTX
Fourier series and its applications by md nazmul islam
PDF
Laplace table
PPTX
Isomorphism
Bab 4 Semester 3
Minimum cost maximum flow
Admission in India
Volume of solids k todd
Flow Network Talk
Matrix of linear transformation
Jaimin chp-5 - network layer- 2011 batch
Fourier integral of Fourier series
Maximum flow
ゲーム理論BASIC 演習37 -3人ゲームの混合戦略ナッシュ均衡を求める-
REMEDIAL MATHAMETICS PHARM D 1ST YEAR FORMULA'S
07122555 0937185627
Fourier integral
SPSF03 - Numerical Integrations
All pair shortest path by Sania Nisar
Fourier series and its applications by md nazmul islam
Laplace table
Isomorphism
Ad

Similar to CS253: Network Flow (2019) (20)

PPT
Ford Fulkerson Algorithm with example .ppt
PPTX
Flow networkFlow networkFlow networkFlow network
PPTX
Ford_Fulkerson_Algorithm_uptade.ppt[1].pptx
PDF
communication-systems-4th-edition-2002-carlson-solution-manual
PPT
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2
PPTX
Introduction to Asymmetric Cipher decipher
PDF
Signal & system
PPT
PDF
Ford Fulkerson wjgnejgbnhjbdreryjerhsrgjhegeujtgsruyw (1).pdf
PDF
22 - Max Flow Porblem Ford Fulkerson Method.pdf
PDF
Sistemas de comunicacion 4ta edicion - bruce a. carlson solutions manual
PDF
Fourier transform
PPT
Max flow min cut
PPT
String kmp
PDF
On the Choice of Compressor Pressure in the Process of Pneumatic Transport to...
PPTX
lapalce transformation maths presentation.ppt.pptx
PDF
Analog Signals and Systems 1st Edition Kudeki Solutions Manual
PPT
The Application of Derivatives
PDF
Talk at the QCDN 2012 conference in Bilbao
PDF
Answers to Problems in Convective Heat and Mass Transfer, 2nd Edition by Ghia...
Ford Fulkerson Algorithm with example .ppt
Flow networkFlow networkFlow networkFlow network
Ford_Fulkerson_Algorithm_uptade.ppt[1].pptx
communication-systems-4th-edition-2002-carlson-solution-manual
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2
Introduction to Asymmetric Cipher decipher
Signal & system
Ford Fulkerson wjgnejgbnhjbdreryjerhsrgjhegeujtgsruyw (1).pdf
22 - Max Flow Porblem Ford Fulkerson Method.pdf
Sistemas de comunicacion 4ta edicion - bruce a. carlson solutions manual
Fourier transform
Max flow min cut
String kmp
On the Choice of Compressor Pressure in the Process of Pneumatic Transport to...
lapalce transformation maths presentation.ppt.pptx
Analog Signals and Systems 1st Edition Kudeki Solutions Manual
The Application of Derivatives
Talk at the QCDN 2012 conference in Bilbao
Answers to Problems in Convective Heat and Mass Transfer, 2nd Edition by Ghia...
Ad

More from Jinho Choi (20)

PDF
Adaptation of Multilingual Transformer Encoder for Robust Enhanced Universal ...
PDF
Analysis of Hierarchical Multi-Content Text Classification Model on B-SHARP D...
PDF
Competence-Level Prediction and Resume & Job Description Matching Using Conte...
PDF
Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...
PDF
The Myth of Higher-Order Inference in Coreference Resolution
PDF
Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...
PDF
Abstract Meaning Representation
PDF
Semantic Role Labeling
PDF
CKY Parsing
PDF
CS329 - WordNet Similarities
PDF
CS329 - Lexical Relations
PDF
Automatic Knowledge Base Expansion for Dialogue Management
PDF
Attention is All You Need for AMR Parsing
PDF
Graph-to-Text Generation and its Applications to Dialogue
PDF
Real-time Coreference Resolution for Dialogue Understanding
PDF
Topological Sort
PDF
Tries - Put
PDF
Multi-modal Embedding Learning for Early Detection of Alzheimer's Disease
PDF
Building Widely-Interpretable Semantic Networks for Dialogue Contexts
PDF
How to make Emora talk about Sports Intelligently
Adaptation of Multilingual Transformer Encoder for Robust Enhanced Universal ...
Analysis of Hierarchical Multi-Content Text Classification Model on B-SHARP D...
Competence-Level Prediction and Resume & Job Description Matching Using Conte...
Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...
The Myth of Higher-Order Inference in Coreference Resolution
Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...
Abstract Meaning Representation
Semantic Role Labeling
CKY Parsing
CS329 - WordNet Similarities
CS329 - Lexical Relations
Automatic Knowledge Base Expansion for Dialogue Management
Attention is All You Need for AMR Parsing
Graph-to-Text Generation and its Applications to Dialogue
Real-time Coreference Resolution for Dialogue Understanding
Topological Sort
Tries - Put
Multi-modal Embedding Learning for Early Detection of Alzheimer's Disease
Building Widely-Interpretable Semantic Networks for Dialogue Contexts
How to make Emora talk about Sports Intelligently

Recently uploaded (20)

PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
Unlock new opportunities with location data.pdf
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
PDF
CloudStack 4.21: First Look Webinar slides
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PPTX
Modernising the Digital Integration Hub
PPTX
observCloud-Native Containerability and monitoring.pptx
PPTX
Chapter 5: Probability Theory and Statistics
PPT
What is a Computer? Input Devices /output devices
PDF
Getting started with AI Agents and Multi-Agent Systems
PPT
Geologic Time for studying geology for geologist
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
PDF
Architecture types and enterprise applications.pdf
PDF
Getting Started with Data Integration: FME Form 101
PDF
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
A review of recent deep learning applications in wood surface defect identifi...
Final SEM Unit 1 for mit wpu at pune .pptx
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
Unlock new opportunities with location data.pdf
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
CloudStack 4.21: First Look Webinar slides
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Modernising the Digital Integration Hub
observCloud-Native Containerability and monitoring.pptx
Chapter 5: Probability Theory and Statistics
What is a Computer? Input Devices /output devices
Getting started with AI Agents and Multi-Agent Systems
Geologic Time for studying geology for geologist
Hindi spoken digit analysis for native and non-native speakers
Transform Your ITIL® 4 & ITSM Strategy with AI in 2025.pdf
Architecture types and enterprise applications.pdf
Getting Started with Data Integration: FME Form 101
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
Module 1.ppt Iot fundamentals and Architecture
A review of recent deep learning applications in wood surface defect identifi...

CS253: Network Flow (2019)