Trees are a subset of graph theory problems that use the features of a tree:
- Exactly 1 path between every pair of nodes.
Important algorithms (hopefull) exhaustive list:
- Preorder + Data strcutures
- Dynamic Programming on tree
- $$$2^K$$$ Decomposition of tree (and Lowest Common Ancestor)
- Kruskal Reconstruction Tree (KRT) (IOI Werewolf trick)
- Set Merging (with linear height merging)
- $$$O(N^2)$$$ Distribution DP
- "Re-rooting" tree DP (where you DP twice, once going down and once propagating from top)
- Centroid Decomposition
- Heavy-Light Decomposition
- UFDS on tree (See: CEOI 2017 Streets)
- (Edit: Thanks errorgorn ) Greedy for furthest node (See: RU Code Funny Salesman)
Would be interested to see if anyone has any suggestions what I missed out on!