An articulation point is a node in a network that, if removed, breaks the network into separate parts.
Analogy: Imagine a city connected by roads. Some intersections are so important that if they close, parts of the city become unreachable from each other.
Graph:
1
/ \
2 - 3
|
4
Articulation points: 2 because removing 2 disconnects 4 from the rest.
Dry Run Walkthrough
Input: Graph with edges: 1-2, 1-3, 2-3, 2-4
Goal: Find all nodes that, if removed, increase the number of disconnected parts in the graph
Step 1: Start DFS from node 1, set discovery time and low value to 1
Non-root node where child's low >= discovery is articulation point
} else if (v !== parent.get(u)) { low.set(u, Math.min(low.get(u)!, disc.get(v)!)); }
Update low[u] for back edge to ancestor
OutputSuccess
Articulation points: 2
Complexity Analysis
Time: O(V + E) because we visit each node and edge once during DFS
Space: O(V) for storing discovery, low, parent, visited, and recursion stack
vs Alternative: Naive approach checks connectivity after removing each node, costing O(V*(V+E)), much slower than DFS-based O(V+E)
Edge Cases
Graph with no edges
No articulation points because no node removal disconnects graph
DSA Typescript
if (!visited.get(node)) { parent.set(node, null); dfs(node); }
Graph with single node
No articulation points because removing the only node leaves empty graph
DSA Typescript
if (!visited.get(node)) { parent.set(node, null); dfs(node); }
Graph with multiple disconnected components
Algorithm runs DFS on each component separately and finds articulation points in each
DSA Typescript
for (const node of this.adjacencyList.keys()) { if (!visited.get(node)) { parent.set(node, null); dfs(node); } }
When to Use This Pattern
When a problem asks for nodes whose removal breaks connectivity, use articulation points detection with DFS and low-link values.
Common Mistakes
Mistake: Not handling root node separately for articulation point condition Fix: Check if root has more than one child to mark it as articulation point
Mistake: Updating low value incorrectly by not considering back edges Fix: Update low[u] with discovery time of visited neighbors that are not parent
Summary
Find nodes in a graph that disconnect it if removed.
Use when you want to identify critical points in networks or connectivity.
Use DFS with discovery and low times to detect articulation points efficiently.