This document discusses graph algorithms using depth-first search (DFS). It begins by defining graph terminology such as vertices, edges, directed and undirected graphs. It then explains DFS, including classifying edges based on the DFS spanning tree. It describes applications of DFS such as finding biconnected components, articulation points, and strongly connected components in directed graphs. The document provides pseudocode for DFS and algorithms for these applications that run in linear time with respect to the number of vertices and edges.