You learned how to solve path problems on DAGs using dynamic programming. You computed shortest paths, longest paths, and counted paths by processing nodes in topological order. You practiced path reconstruction using a parent array, handled modulo arithmetic for large counts, and detected cycles that make problems unbounded.
DAGs let you order nodes so each depends only on earlier ones. This makes DP natural and efficient, solving problems that are hard on general graphs. Next section: more advanced graph algorithms and improvement techniques.