Path
IOI/ACM ICPC Training
June 2004
All Pair Shortest Path
Note: Dijkstras Algorithm takes O((V+E)logV)
time
k
j
i
Definition
Find shortest distance from i to j using
vertices 1 .. k only
k
j
i
Example
2
2 4
1
1 4
1
3
3
1 5
3 5
1
i = 4, j = 5, k = 0
2
2 4
1
1 4
1
3
3
1 5
3 5
1
i = 4, j = 5, k = 1
2
2 4
1
1 4
1
3
3
1 5
3 5
1
i = 4, j = 5, k = 2
2
2 4
1
1 4
1
3
3
1 5
3 5
1
i = 4, j = 5, k = 3
2
2 4
1
1 4
1
1
3
1 5
3 5
1
Idea
k
j
i
wi , j for k 0
The tables
i k
i
j
j
k
k=4
k=5
The code
for i = 1 to |V|
for j = 1 to |V|
a[i][j][0] = cost(i,j)
for k = 1 to |V|
for i = 1 to |V|
for j = 1 to |V|
a[i][j][k] = min( a[i][j][k-1],
a[i][k][k-1] + a[k][j][k-1])
Topological sort
b d
a
c e
Each node x represents a course x
(x, y) represents that course x is a prerequisite to course y
Note that this graph should be a directed graph without cycles.
A linear order to take all 5 courses while satisfying all prerequisites
is called a topological order.
E.g.
a, c, b, e, d
c, a, b, e, d
Topological sort
Arranging all nodes in the graph in a
topological order
Applications:
Schedule tasks associated with a project
Topological sort algorithm
Algorithm topSort1
n = |V|;
Let R[0..n-1] be the result array;
for i = 1 to n {
select a node v that has no successor;
R[n-i] = v;
delete node v and its edges from the graph;
}
return R;
Example
b d b
a a
c c
e e
1. d has no successor! 2. Both b and e have no
Choose d! successor! Choose e!
b b
a a
a
c
3. Both b and c have 4. Only b has no 5. Choose a!
no successor! successor! The topological order
Choose c! Choose b! is a,b,c,e,d
Time analysis
Finding a node with no successor takes
O(|V|+|E|) time.
We need to repeat this process |V| times.
Total time = O(|V|2 + |V| |E|).
Matching
Free Vertex
Definitions
Maximum Matching: matching with the
largest number of edges
Definition
Note that maximum matching is not unique.
Intuition
Let the top set of vertices be men
Let the bottom set of vertices be women
Suppose each edge represents a pair of
man and woman who like each other
a b c d e
f g h i j
Proof:
() If there is an augmenting path, clearly not
maximum. (Flip matching and non-matching
edges in that path to get a better matching!)
Proof for the other direction
() Suppose M is not maximum. Let M be a
maximum matching such that |M|>|M|.
Consider H = MM = (MM)-(MM)
i.e. a set of edges in M or M but not both
H has two properties:
WithinH, number of edges belong to M > number of
edges belong to M.
H can be decomposed into a set of paths. All paths
should be alternating between edges in M and M.
There should exist a path with more edges from
M. Also, it is alternating.
Idea of Algorithm
Start with an arbitrary matching
While we still can find an augmenting path
Find the augmenting path P
Flip the edges in P
Labelling Algorithm
Start with arbitrary matching
Labelling Algorithm
Pick a free vertex in the bottom
Labelling Algorithm
Run BFS
Labelling Algorithm
Alternate unmatched/matched edges
Labelling Algorithm
Until a augmenting path is found
Augmenting Tree
Flip!
Repeat
Pick another free vertex in the bottom
Repeat
Run BFS
Repeat
Flip
Answer
Since we cannot find any augmenting path,
stop!
Overall algorithm
Start with an arbitrary matching (e.g., empty matching)
Repeat forever
For all free vertices in the bottom,
do bfs to find augmenting paths
3
6 4
6
Weighted Matching
Score: 6+3+1=10
6 4
6
Maximum Weighted Matching
Score: 6+1+1+1+4=13
6 4
6
Augmenting Path (change of
definition)
Any alternating path such that total score of unmatched
edges > that of matched edges
The score of the augmenting path is
Score of unmatched edges that of matched edges
6 4
6
Note: augmenting path need not start and end at free vertices!
Idea for finding maximum
weight matching
Theorem: Let M be a matching of
maximum weight among matchings of
size |M|.
If P is an augmenting path for M of
maximum weight,
Then, the matching formed by augmenting
M by P is a matching of maximum weight
among matchings of size |M|+1.
Overall Algorithm
Start with an empty matching
Repeat forever
Find an augmenting path P with maximum score
If the score > 0, then flip the edges
Otherwise, stop and report the maximum weight
matching.
Time analysis
The same!
Time required = O(|V|2 + |V| |E|)
Stable Marriage
Problem
IOI/ACM ICPC Training
June 2004
Stable Marriage Problem
Given N men and N women, each person
list in order of preference all the people of
the opposite sex who would like to marry.
Problem:
Engage all the women to all the men in such a
way as to respect all their preferences as
much as possible.
Stable?
A set of marriages is unstable if
two people who are not married both prefer each other than their
spouses
E.g. Suppose we have A1 B3 C2 D4 E5. This is unstable
since
A prefer 2 more than 1 A B C D E 1 2 3 4 5
2 prefer A more than C
2 1 2 1 5 E D A C D
5 2 3 3 3 A E D B B
1 3 5 2 2 D B B D C
3 4 4 4 1 B A C A E
4 5 1 5 4 C C E E A
Nave solution
Starting from a feasible solution.
Check if it is stable.
If yes, done!
If not, remove an unstable couple.
Is this work?
Nave solution (2)
Does not work!
E.g.
A1 B3 C2 D4 E5
A2 B3 C1 D4 E5 A B C D E 1 2 3 4 5
A3 B2 C1 D4 E5 2 1 2 1 5 E D A C D
A3 B1 C2 D4 E5
5 2 3 3 3 A E D B B
1 3 5 2 2 D B B D C
3 4 4 4 1 B A C A E
4 5 1 5 4 C C E E A
Solution
1. Let X be the first man.
2. X proposes to the best woman in the
remaining on his list. (Initially, the first woman
on his list!)
3. If is not engaged
Pair up (X, ). Then, set X=next man and goto 1.
4. If prefers X more than her fiancee Y,
Pair up (X, ). Then, set X=Y and goto 1.
5. Goto 1
Example
A B C D E
2 1 2 1 5
5 2 3 3 3
1 3 5 2
A B C D E 1 2 3 4 5
4
2 1 2 1 5 E D A C D
5 2 3 3 3 A E D B B
1 3 5 2 2 D B B D C
3 4 4 4 1 B A C A E
4 5 1 5 4 C C E E A
Time analysis
If there are N men and N women,
O(N2) time
Algorithm
prefer[m][s]=w means the woman w is on the s-
th position in the preference list of the man m
Let next[m] be the current best woman in his
remaining list. (Initially, next[m]=0)
fiancee[w]=m means the man m engaged to
woman w. (Initially, fiancee[w]=0)
Let rank[w][m] is the ranking of the man m in the
preference list of the woman w.
For(m=1;m<=N;m++) {
For(s=m;s!=0;
}