洛谷P3313 [SDOI2014]旅行 题解 树链剖分+线段树动态开点
题目链接: https://www.luogu.org/problem/P3313 这道题目就是树链剖分+线段树动态开点。 然后做这道题目之前我们先来看一道不考虑树链剖分之后完全相同的线段树动态开点的题目: https://www.cnblogs.com/codedecision/p/11791200.html 然后你就会发现这就是树链剖分+上题的线段树处理。 然后这道题目就变得很简单。 实现代码如下: #include <bits/stdc++.h> using namespace std; #define INF (1<<29) const int maxn = 100010; int fa[maxn], dep[maxn], size[maxn], son[maxn], top[maxn], seg[maxn], seg_cnt, rev[maxn]; vector<int> g[maxn]; void dfs1(int u, int p) { size[u] = 1; for (vector<int>::iterator it = g[u].begin(); it != g[u].end(); it ++) { int v = (*it); if (v == p) continue; fa[v] = u; dep[v] = dep[u] + 1; dfs1(v, u);