# Definition of a reachable ancestor (Skiena TADM 2nd ed section 5.9.2)

In The Algorithm Design Manual section 5.9.2, covering graphs and articulation vertices, Steven Skiena writes

Let reachable_ancestor[v] denote the earliest reachable ancestor of vertex v, meaning the oldest ancestor of v that we can reach by a combination of tree edges and back edges.

This phrasing is ambiguous. On the errata page of his website, he clarifies:

it is clearer to say: "denote the earliest reachable ancestor of vertex v, meaning the oldest ancestor of v that we can reach from a descendant of $v$ by using a back edge."

But to me, this phrasing is still somewhat ambiguous. Consider the following four-vertex graph G:

    A
|
+ - B
|   |
|   C
|   |
+ - D


We conduct an alphabetical depth-first search (DB is a back edge). According to Skiena's revised definition, it would seem that A is a reachable ancestor of C as follows: D is a descendent of C, and we can reach A from D using a back edge by following the path DBA. However, execution of Skiena's code for finding articulation vertices via depth-first search on G results in reachable_ancestor[C] = B, not A; therefore I don't think he intends for A to count as a reachable ancestor of C.

Might it be more accurate to say that reachable_ancestor is the oldest ancestor of v that we can reach from a descendant of v by using a back edge but without passing through any other ancestors of v?