摘要: 经过了一系列的前置知识,终于学会了树链剖分!! 重链剖分的思想: 重链剖分可以将树上的任意一条路径划分成不超过$O(logn)$条连续的链,每条链上的点深度互不相同(即是自底向上的一条链,链上所有点的$LCA$$为链的一个端点)。 重链剖分还能保证划分出的每条链上的节点$DFS$序连续,因此可以方便 阅读全文
posted @ 2020-11-13 22:28 小又又yyyy 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 定义: dfs序:每个节点在dfs深度优先遍历中的进出栈的时间序列。 性质: dfs序可以把一棵树区间化,即可以求出每个节点的管辖区间。 对于一棵树的dfs序而言,同一棵子树所对应的一定是dfs序中连续的一段。 code: void dfs(int x,int fa){ in[x] = ++cnt; 阅读全文
posted @ 2020-11-13 17:55 小又又yyyy 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 树上差分 树上差分,就是利用差分的性质,对路径上的重要节点进行修改(而不是暴力全改),作为其差分数组的值,最后在求值时,利用$dfs$遍历求出差分数组的前缀和,就可以达到降低复杂度的目的,可以应用于求对树上的一段路径进行操作,并询问某个点或某条边被经过的次数 点差分 设将两点$u$,$v$之间路径上 阅读全文
posted @ 2020-11-13 17:31 小又又yyyy 阅读(123) 评论(0) 推荐(0) 编辑
摘要: #### st表算法流程: 预处理:$ST$表在预处理阶段需要计算一个数组$f$,$f_{i,j}$表示区间$i\rightarrow i+2j-1$的最小值,也就是从$i$开始连续$2j$个数的最小值。它可以通过倍增得到:(将$2j$从中间平均分成两部分,每一部分都刚好是$2$,而这就是一个子问题 阅读全文
posted @ 2020-11-13 07:53 小又又yyyy 阅读(104) 评论(0) 推荐(0) 编辑