Visual walkthrough — Articulation points and bridges — Tarjan's low-link values
Step 1 — Draw the graph and name what a "cut" even means
WHAT. We start with a plain undirected graph: dots (called vertices) joined by lines (called edges). A dot is a place; a line is a two-way road between two places.
WHY. Before we compute anything, we must see the thing we are hunting. A bridge is one line that, if erased, splits the picture into two pieces that no longer touch. An articulation point is one dot that, if erased along with all lines touching it, does the same. These are the single points of failure.
PICTURE. Below, the graph has vertices with edges , , , . The red line is the one we will prove is a bridge. Notice the triangle on the right: those three are held together by three roads, so none of them is fragile — but the single road reaching that triangle from vertex is.

Step 2 — Run DFS and watch the tree grow (this is where disc is born)
WHAT. A Depth-First Search walks as deep as it can before backing up. Each time it steps to a brand-new vertex, it uses a tree edge (a solid arrow, "the way down"). The order of first visits gives us .
WHY. DFS turns a tangled graph into a clean tree hanging from the start vertex. On that tree, every non-tree edge is a back edge — a dashed line jumping from a vertex up to one of its own ancestors. (In an undirected graph, DFS never makes cross or forward edges — a fact we lean on completely.) So the whole structure is just: a spine of tree edges, plus a few dashed shortcuts.
PICTURE. Start at . Go (solid, timestamps ). From there is an edge to , but is already visited and is an ancestor — that is the dashed back edge.

Step 3 — Seed low: every vertex can at least reach itself
WHAT. Before any climbing, set for every vertex the instant we discover it.
WHY. can trivially "reach" its own arrival time — you are standing on your own platform. This is the honest starting guess; every rule after this can only lower it (find something older and higher to swing to), never raise it. That is why is a running minimum.
PICTURE. Each vertex gets two stacked numbers: on top (fixed forever) and below (will still change). Right now they are equal everywhere.

Step 4 — Fire the back edge: low drops using disc[w], not low[w]
WHAT. We are at the deepest vertex . Its edge to leads to an already-visited ancestor — a back edge. We update:
WHY. A back edge is a one-hop shortcut up to ancestor . Landing on means we can reach 's timestamp, which is — an older, higher platform than 's own . We take the smaller. Crucially we use (how high the jump landed) and not . Using would pretend the back edge lets us continue beyond through 's other shortcuts — a path that does not actually exist. So back edges record the landing spot, tree children pass along the whole reachable minimum (that comes next).
PICTURE. The dashed arrow lights up; the number under ticks
from down to . The label on the arrow reads disc[1]=1, not low[1].

Step 5 — Back up the spine: children hand their low to the parent
WHAT. DFS finishes with and returns to . Now absorbs its child's value: Return to : .
WHY. This is the tree-child rule, and it is different from the back-edge rule. Anything the child's entire subtree can escape to is also escapable from the parent — you can always walk down into the child and use whatever shortcut it found. So the parent inherits the child's full . This is how a shortcut discovered deep inside a subtree (the jump) propagates all the way up the spine to .
PICTURE. Watch the value climb: it is born at , flows up to , then to . The chain of numbers now reads on the triangle — that entire subtree can reach platform .

Step 6 — The bridge test emerges: compare low[1] with disc[0]
WHAT. We finish the triangle and return to the root . Look at its child : Meanwhile inside the triangle: and , so edges and are not bridges.
WHY. is the highest place 's whole subtree can escape to. If that height is still strictly below (bigger timestamp than ), then the subtree can reach neither nor anything above — except by walking back through the single edge . Erase that edge and the subtree floats away. That is precisely . The inequality is strict: if equalled , a back edge would reach itself, giving an alternate route — no bridge.
PICTURE. The edge glows red. Above it float the two numbers being compared:
versus , with a big > between them.

Step 7 — The articulation test, and why ≥ not >
WHAT. Same numbers, one weaker inequality. A non-root vertex with tree child is an articulation point iff . In our graph, vertex has child with — so is an articulation point (equality case!).
WHY. Now we delete the vertex , not just one edge. Suppose 's subtree has a back edge landing exactly on (so ). For a bridge that back edge saved us — was still reachable. But once we remove entirely, that back edge dies with it, and the subtree is stranded. So equality still cuts. Hence for vertices, for edges — the single symbol difference encodes "we deleted the landing spot itself."
PICTURE. Left panel: cut the edge into — the triangle still hangs on via the shortcut (not a bridge from 's side). Right panel: cut the vertex — the shortcut vanishes with it and the triangle drops off. Same numbers, different verdict.

Step 8 — Degenerate case: the root has no ancestor (the ≥2-children rule)
WHAT. The root of the DFS tree has no parent, so the test is meaningless for it (there is nothing above to be cut off from). The root gets its own rule: it is an articulation point iff it has tree children.
WHY. The root sits at the very top; no vertex is older. If DFS launched two or more separate tree children from the root, those subtrees had no way to reach each other except through the root (otherwise DFS would have merged them into one subtree). Remove the root and they split. One child ⇒ nothing to disconnect. In the star graph , DFS from makes three separate children is an articulation point.
PICTURE. Root with three fan-out tree edges to , no edges among them. Delete and the picture shatters into three lone dots.

The one-picture summary
Everything compressed: the spine of timestamps, the one dashed shortcut, the values flowing up, and the single red bridge where . All of Tarjan lives in this one frame — one Depth-First Search pass, by Big-O Notation.

Recall Feynman: tell the whole walkthrough to a 12-year-old
You explore a treehouse fort, climbing down ropes to new platforms. The order you first reach each platform is its number — platform first, then , then , then . Along the way you sometimes spot a secret shortcut rope going back up to an older platform; the oldest platform you can swing back to (using one shortcut) is your number. When you climb back up the ropes, you tell your parent platform the lowest number you found, so good shortcuts travel all the way up the fort. At the end you check each rope: if the whole section below a rope can only swing back to itself, never higher than where the rope hangs (), that rope is the only thing holding the section up — a bridge. And if a whole section can't get past a certain platform without stepping on it (), that platform is a must-not-break support — an articulation point. The very top platform is special: it's a support only if it launched two or more separate sections.
Recall Two-line self-test
Why disc[w] (not low[w]) on a back edge? ::: A back edge only tells you how high you landed; using low[w] would credit paths past the landing spot that don't exist, over-lowering low and hiding real bridges.
Why is the bridge test strict > but the articulation test ≥? ::: A bridge deletes only the edge, so a back edge reaching u itself still saves connectivity; an articulation deletes the whole vertex u, killing that back edge too — so equality still disconnects.