 
Summary: CS 5050 Program 2 (20 points)
Biconnected Components
Introduction
The algorithm in the book is a little more difficult to implement as it involves creating a new graph. For this
assignment, we will find articulation points as follows:
1. Do a depth first search, numbering the nodes as they are visited in preorder. Call the numbers num(v). If a
node has already been visited, we consider the edge to it as a "back edge". The undirected edges become
"directed" by the order they are visited.
2. The root is an articulation point if it has two children. Otherwise, its removal would create two subtrees.
3. For each node compute the lowest vertex that can be reached by zero or more tree edges followed by possibly
one back edge.
Low(v) is computed via a postorder traversal and is the minimum of
1. Num(v) [taking no edges]
2. the lowest back edge among all back edges (v,w) [no tree edges]
3. The lowest Low(w) among all tree edges (v,w) [some tree edges and a back edge]
Given Low, we find articulation points as:
1. The root is an articulation point if it has more than one child
2. Any other vertex v is an articulation point if and only if v has some child in the tree such that
Low(w) >=Num(v)
In the example below, the original graph is on the left. The nodes in the graph to the right are labeled with
