为啥我的树剖这么慢?
就是 P4211 从一个点跳到根节点的路径 +1?
int sz[N], son[N], fa[N];
void dfs(int u, int f) {
sz[u] = 1;
for (int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if (to == f) continue;
dfs(to, u);
sz[u] += sz[to];
if (sz[son[u]] < sz[to]) son[u] = to;
}
}
int top[N], dfn[N], ver[N], cnt;
void dfs2(int u, int t) {
top[u] = t, dfn[u] = ++cnt, ver[cnt] = u;
if (son[u]) dfs2(son[u], t);
for (int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if (to == son[u] || to == fa[u]) continue;
dfs2(to, to);
}
}
...
void modify_path(int x) {
while (x) {
modify(1, 1, n, dfn[top[x]], dfn[x], 1);
x = fa[top[x]];
}
}
int query_path(int x) {
int ans = 0;
while (x) {
ans += query(1, 1, n, dfn[top[x]], dfn[x]);
x = fa[top[x]];
}
return ans;
}