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?
A small modification makes the definition agree with Skiena's algorithm. 
"Let reachable_ancestor[v] 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 at most one back edge."

If we view undirected edges as "two-way" directed edges, then to reach A from C would require two back edges: DB and BA.  Thus the earliest ancestor that can be reached from C by using at most one back edge is B.