This document discusses depth-first search (DFS) algorithms and their applications to finding spanning trees and articulation points in graphs. It begins by explaining how DFS generalizes preorder tree traversal and avoids cycles in arbitrary graphs by marking visited vertices. DFS takes O(V+E) time on graphs. The document then explains how DFS can be used to find a depth-first spanning tree and identify biconnected components and articulation points via numbering schemes like num(v) and low(v).