3.5.9 · D5Graphs
Question bank — Articulation points and bridges — Tarjan's low-link values
True or false — justify
Every edge in a graph is either a bridge or lies on a cycle.
True — an edge is a bridge exactly when it lies on no cycle; if any cycle passes through it, that cycle is an alternate route, so removing the edge keeps the graph connected.
Every bridge's endpoints are both articulation points.
False — an endpoint of degree 1 (a leaf) is not a cut vertex, because removing it disconnects nothing new. E.g. in
0—1 the edge is a bridge but neither vertex is an articulation point (each has only one neighbour).If a graph has no bridges then it has no articulation points.
False — a "bowtie" (two triangles sharing one vertex) has zero bridges but the shared vertex is an articulation point. Bridge-free ≠ cut-vertex-free.
If a graph has no articulation points then it has no bridges.
True — a bridge with both endpoints of degree forces at least one endpoint to be a cut vertex; and a degree-1 endpoint makes the other endpoint a cut vertex (if it has other neighbours). A graph with vertices and a bridge always has a cut vertex.
The root of the DFS tree is an articulation point iff for some child .
False — the root has no ancestor, so that inequality is always true for every child. The correct root rule is a separate case: == DFS-tree children==.
In an undirected DFS, a non-tree edge can point forward to a descendant.
False — undirected DFS produces only tree edges and back edges; there are no forward or cross edges, because the first time you see the other endpoint you'd have already taken it as a tree edge.
can be larger than .
False — starts at and only ever takes a , so always.
Two vertices in the same cycle can never both be articulation points.
False — take two triangles joined by a path; several vertices sit on cycles yet are still cut vertices because they gate access to separate blocks. Being on a cycle only protects the edges of that cycle.
Adding one extra edge to a graph can turn several articulation points into non-articulation points at once.
True — a single edge can create cycles that give many subtrees a back-route above their gateway vertices, lowering their values and erasing multiple cut vertices simultaneously.
A tree (acyclic connected graph) with vertices: every edge is a bridge.
True — a tree has no cycles, so no edge has an alternate path; removing any edge splits the tree into two components.
Spot the error
"For a back edge , update ."
Wrong — a back edge is not a tree edge, so we record only how high we jumped, which is , not . Using double-counts paths through 's subtree and can wrongly lower , hiding real bridges.
"Bridge test: is a bridge iff ."
Wrong sign — bridges need the strict . Equality means a back edge reaches itself, giving an alternate route around the edge , so it is not a bridge. (Articulation uses because deleting the vertex kills even that back edge.)
"To avoid bouncing back to the parent, just skip any neighbour equal to parent."
Wrong with multi-edges — if two parallel edges join and its parent, the vertex-based skip discards the second edge, which is a genuine back-route, and you'd falsely report a bridge. Track the edge id and skip the parent edge exactly once.
"Run DFS from vertex 0 only; that finds all bridges."
Wrong if the graph is disconnected — you must loop over every vertex and start a fresh DFS on each undiscovered one, otherwise components never touched by the DFS from 0 are silently ignored.
" is an articulation point iff it has degree ."
Wrong — degree is necessary but nowhere near sufficient. Any interior vertex of a cycle has degree 2 yet is not a cut vertex. What matters is whether some child subtree cannot escape above .
"We should compare low[v] against low[u] in the bridge/AP tests."
Wrong — the tests compare the child's escape height against the parent's own discovery time , asking "can 's subtree reach or above?" Comparing to mixes in 's own back edges and breaks the logic.
"Update before the recursive call dfs(v,u)."
Wrong order — is only finalized after 's whole subtree is explored, so the update must come after the recursive call returns; before the call is just its own .
Why questions
Why does a back edge use but a tree child uses ?
A tree child's entire subtree legitimately belongs to 's reachable set, so we inherit its best escape ; a back edge is a single one-time jump whose only information is the height it lands at, .
Why is the root's rule " children" and not the low-link inequality?
The root has no ancestor to reach "above," so holds trivially for every child; the meaningful question becomes whether independent subtrees hang off it, since they can only interconnect through the root.
Why does the bridge condition use strict while the articulation condition uses ?
Deleting an edge leaves present, so a back edge to () is a valid detour → not a bridge. Deleting the vertex destroys that back edge too, so even equality still severs the subtree → still a cut vertex.
Why can Tarjan find everything in a single DFS pass?
Each vertex is discovered once and each edge examined a constant number of times while computing and ; the bridge/AP tests are checks folded into that same traversal — no extra pass needed. See Big-O Notation.
Why does having any back edge from a subtree above its root vertex mean that tree edge isn't a bridge?
That back edge is an alternate path connecting the subtree to an ancestor, so removing the tree edge no longer disconnects anything — the graph stays in one piece through the back edge.
Why do we skip the parent edge but still process other back edges to already-visited vertices?
The parent edge is the tree edge we descended on — reusing it gives no new "climb up" information. Every other visited neighbour is a genuine ancestor reachable by a real back edge, which is exactly the escape route must capture.
Why are bridges and articulation points called "single points of failure"?
Their removal increases the number of connected components, meaning the network splits — a single edge or single vertex whose loss disconnects the graph, the graph-theory analogue of a critical cable or a critical router.
Edge cases
A single isolated vertex (no edges): any bridges or articulation points?
Neither — with no edges there is nothing to remove and removing the lone vertex still leaves zero components in the remaining graph, so it's not a cut vertex.
A single edge 0—1: bridge? articulation point?
The edge is a bridge (removing it disconnects the two vertices), but neither endpoint is an articulation point, since each has degree 1 and removing a leaf disconnects nobody new.
A pure cycle : how many bridges and articulation points?
Zero of each — every vertex and edge lies on the cycle, so each node has an alternate route around it and no single removal splits the graph.
A disconnected graph with two separate components: does Tarjan still work?
Yes, provided the outer loop restarts DFS on each undiscovered vertex; bridges and articulation points are computed within each component independently, and cross-component absence of edges never confuses the tests.
A self-loop 0—0: how does it affect , , and the tests?
A self-loop is never a bridge and creates no articulation point; it should be ignored (or treated as a back edge to itself giving , which changes nothing since already equals ).
Two vertices joined by two parallel edges: is either edge a bridge?
No — each edge is a backup for the other, so removing one leaves the graph connected; the naive
v == parent skip must not treat the second edge as absent, or it will falsely flag a bridge.A "path graph" : which are bridges, which are articulation points?
All edges are bridges (no cycles anywhere), and every interior vertex (1, 2, 3) is an articulation point; the two endpoints (0 and 4) are leaves and are not cut vertices.
Recall One-line self-test before you leave
The three inequalities/rules to never confuse. Bridge, non-root AP, root AP — state all three ::: Bridge: (strict, cut an edge). Non-root AP: (equality still cuts a vertex). Root AP: DFS-tree children.
See also: Biconnected Components, Bridge Trees / 2-edge-connected components, Strongly Connected Components - Tarjan, Connected Components.