The second Stanford Algorithms Course by Tim Roughgarden, focusing on graphs and data structures, was an amazing experience. Coding up Kosaraju’s algorithm for finding strongly connected components in a huge directed graph was challenging! Coding up Dijkstra’s shortest path algorithm and building a few heaps were much easier.