[学习笔记]点分治
点分治 解决问题 对于某些限定条件的路径静态地进行统计的算法. 基本思路 分治思想 对于某一点P,树上路径可以分为两类,经过点P,包含与点P的某一棵子树上 第二种可以递归处理 第一种通过求P的所有子节点的深度就可以处理 树的重心 如果是一条链的话,那复杂度很大,需要递归N层,每个节点访问一次. 用重心求只需要 \(log\) 层 模板题① Tree 本题是求两点路径小于等于k code #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int maxn = 1e4 + 7; const int inf = 0x3f3f3f3f; int k, tot, head[maxn]; bool vis[maxn]; int nowN, rt, maxP; int fin; int Size[maxn], dep[maxn]; struct Edge { int to, next, w; } e[maxn << 1]; vector<int> D; void init(int n) { tot = 0; for (int i = 0; i <= n; ++i) { head[i] = 0; vis[i] = 0; } fin = 0;