Académique Documents
Professionnel Documents
Culture Documents
b articulation point
a e
h
d
c
network of stations i
g
f
• Articulation point
- Any vertex whose removal results in a disconnected graph
- If v is an articulation point, then there exist distinct vertices w and
x such that v is in every path from w to x
• Biconnected graph
- Any graph which contains no articulation points
- Biconnected graphs have at least two vertex-disjoint paths
between any pair of vertices
- To disconnect a biconnected graph, we must remove at least two
vertices
- We can generalize the above concepts to k-connected graphs (k
vertices must be removed to disconnect the graph)
-- --
-2-
G
A graph
I
G
B
I
Its biconnected components
B B
C C
E E
H F J E
A D F
H F J
A D
-3-
v is an articulation point
since the right subtree of v
does not have a back edge
to a proper ancestor !!
...
y
... ...
v v
y ...
x
-- --
-4-
x and y are
descendants of v x and y are
but belong in descendants of v
different subtrees but belong in
... the same subtree
v
v cannot disconnect them
... ... in this case!!
v y
...
...
-5-
G 2 D
I
B 3 F J 10
C
4 H 9
E E
H F J 5 B
G 7
A D C
6
I 8
source
- First, assign a number to each vertex based on the time at which the
vertex is visited for the first time (discovery[v])
- Then, keep track of how back in the tree one can get from a vertex
(back[v])
- back[v] is initialized to discovery[v] in the beginning
- How should we update back[v] and how should we detect articula-
tion points ?
-- --
-6-
Case 2
Case 1 v
v
backtrack
back-edge if back[w] < discovery[v]
back[v] = min(back[v], back[w])
back[w] = min(back[w], discovery[v]) w
else if back[w] >= discovery[v]
w
v is an articulation point !!
A A
A discovery[A]=1 A
back[A]=1
D D
D discovery[D]=2
D
back[D]=2
F F
back-edge
discovery[F]=3 discovery[F]=3
F back[F]=3 F back[F]=1 discovery[E]=4
(=discovery[A])
E E
back[E]=4
B discovery[B]=5 B
back[B]=5 back-edge
discovery[C]=6
discovery[C]=6
C back[C]=6 C back[C]=4
(=discovery[E])
A A A
D D D
F F F
E backtrack E E
-7-
A A
D D
F F
E E
backtrack
backtrack
back[G] = discovery[B]
A A
D
D D
backtrack
F backtrack
discovery[H]=9
back[E] > discovery[F] back[H]=9
F F
back[B] = discovery[E]
E H
biconnected component
E remove it from the tree
B biconnected component
remove it from the tree
A A A
D D D
back[H] < discovery[F]
discovery[J]=10
F F F J back[J]=10
discovery[H]=9 discovery[F]=3
H back[H]=1 H back[F]=1 H
(=discovery[A]) backtrack (=back[H])
back-edge
A A A
back[F] < discovery[D]
discovery[D]=2
D D D back[D]=1
discovery[J]=10 back[J] < discovery[F] (=back[F])
back[J]=2 discovery[F]=3
F J J backtrack F J
(=discovery[D]) F back[F]=1
H H H
back-edge backtrack
A
back[D] = discovery[A]
F J
H