These are the shortest on-ramp notes in this category and the ones most likely to be usable immediately in contest practice.
BFS and DFS, Topological Sort
When a problem hides an interaction graph, these notes aim to make the graph structure explicit instead of magical.
Traversal, shortest paths, tree decompositions, and structure-finding routines.
Graph problems often become simpler once the hidden graph is made explicit. The notes here focus on that step: identify the graph, identify the query pattern, then choose the graph routine that preserves the structure you care about.
The most reusable graph ideas are usually not the proofs in isolation but the reductions:
when a shortest-path routine is enough and when it is not,
when a tree should be linearized,
when the hard part is actually the path aggregation structure around the graph.
The labels are not cosmetic. They are there to signal the amount of prerequisite structure and implementation fragility you should expect before opening the note.
These are the shortest on-ramp notes in this category and the ones most likely to be usable immediately in contest practice.
BFS and DFS, Topological Sort
These notes assume the base routine is already familiar and focus on the first real structural upgrades.
Dijkstra, Minimum Spanning Tree, Euler Tour Technique, Lowest Common Ancestor (Binary Lifting), Strongly Connected Components, Bridges and Articulation Points
These are the notes where proofs, reductions, or implementation details become the main bottleneck.
2-SAT, Virtual Tree, Centroid Decomposition, Heavy-Light Decomposition
These are the finished note pages in this category, each with rendered TeX, C++ code, references, and practice suggestions.
The fundamental graph traversals for reachability, layering, component discovery, and tree exploration.
Single-source shortest paths in non-negative weighted graphs with a min-heap and lazy deletions.
Order a DAG so every directed edge points forward, then reuse that order for dependency processing and DAG DP.
Connect a weighted graph as cheaply as possible, usually with Kruskal and DSU as the contest default.
Flatten a rooted tree into entry and exit times so subtree queries become interval queries on an array.
Lift nodes by powers of two so LCA and ancestor queries become logarithmic after one tree preprocessing pass.
Compress a directed graph into its mutually reachable blocks, then reason on the resulting DAG instead of the original cycles.
Use DFS lowlink values to find edges or vertices whose removal disconnects an undirected graph.
Reduce two-literal clauses to an implication graph, then solve satisfiability with SCC decomposition.
Compress a query's marked nodes and the LCAs between them into a much smaller tree that preserves the relevant paths.
Recursively split a tree by balanced centroids so global path problems can be reduced to logarithmically many local views.
Reduce tree path queries to a logarithmic number of segment queries by carving the tree into heavy chains.
The default order follows each note's dependency weight: early notes establish primitives, later notes reuse them or assume the same invariants without re-explaining them.
The fundamental graph traversals for reachability, layering, component discovery, and tree exploration.
Single-source shortest paths in non-negative weighted graphs with a min-heap and lazy deletions.
Order a DAG so every directed edge points forward, then reuse that order for dependency processing and DAG DP.
Connect a weighted graph as cheaply as possible, usually with Kruskal and DSU as the contest default.
Flatten a rooted tree into entry and exit times so subtree queries become interval queries on an array.
Lift nodes by powers of two so LCA and ancestor queries become logarithmic after one tree preprocessing pass.
Compress a directed graph into its mutually reachable blocks, then reason on the resulting DAG instead of the original cycles.
Use DFS lowlink values to find edges or vertices whose removal disconnects an undirected graph.
Reduce two-literal clauses to an implication graph, then solve satisfiability with SCC decomposition.
Compress a query's marked nodes and the LCAs between them into a much smaller tree that preserves the relevant paths.
Recursively split a tree by balanced centroids so global path problems can be reduced to logarithmically many local views.
Reduce tree path queries to a logarithmic number of segment queries by carving the tree into heavy chains.
These are still intentionally shown as planned or outline topics rather than shallow filler. The branch should feel incomplete in honest places instead of fake-complete everywhere.
Raw files are still available here when you want the original TeX, C++, or statement assets.