Either removal of an edge disconnects the graph (a single edge), or
Every three vertices in the component are contained in a simple cycle.
Articulation vertex: an intersection of two different biconnected component.
There is only one articulation vertex, otherwise the two components would just
be one.
Bi-connection provides fault tolerance.
Solution
For vertex v, if a child s of v has Low(s)≥DFS#(v),
then v is articulation vertex. (As there could be s⇝v, but v
has no back edge)
Low(v)=min⎩⎨⎧DFS#(v)Low(s), for each child sDFS#(w), where (v,w) is a back edge
Low-point is the lowest depth of neighbors and all descendants of v
(included) in the DFS tree
counter = 1, mark all vertices as not visited
BICONNECTED-COMOPNENTS(V)
mark v as visited
DFS#(v) = counter
counter += 1
Low(v) = DFS#(v)
for each edge (v, w)
if w not visited
w.parent = v
BICONNECTED-COMPONENT(w)
Low(v) = min( Low(v), Low(w) )
if Low(w) >= DFS#(v)
report v is an articulation vertex
subgraph rooted at s and v forms a biconnected graph
else if w != v.parent
Low(v) = min( Low(v), DFS#(w) )