树分治
点分治(重心剖分)
处理大规模树上路径信息问题,遍历树上所有路径(一般是无根树)。
朴素想法:枚举每个端点进行 DFS,但复杂度达到 $O(n^2)$。为了高效,引入分治思想,对于每个点,考虑包含和不包含这个点的路径;同时,选择重心作为根递归求解可以保证复杂度为 $O(nlogn)$;总体时间复杂度为 $O(nlog^2 n)$
大体思路:选择整棵树的重心 $r$,统计以 $r$ 为根的答案,再对所有子树求解,最后根据容斥原理求解最终答案。
参考链接:
https://zhuanlan.zhihu.com/p/359209926
https://kirainmoe.com/blog/post/point-divide-and-conquer-notes/
https://oi-wiki.org/graph/tree-divide/
