OSDN Git Service

add spaces
authorouuan <y___o___u@126.com>
Sat, 30 Mar 2019 12:14:56 +0000 (20:14 +0800)
committerGitHub <noreply@github.com>
Sat, 30 Mar 2019 12:14:56 +0000 (20:14 +0800)
docs/ds/tree-decompose.md

index 1846819..770a96a 100644 (file)
@@ -1,4 +1,4 @@
-# 分块方式
+# 树分块
 
 关于树分块,可以先看一道模板题 [[SCOI2005]王室联邦](https://www.luogu.org/problemnew/show/P2325)。
 
@@ -8,7 +8,7 @@
 
 这里先提供一种构造方式,再予以证明:
 
-**dfs,并创建一个栈,dfs一个点时先记录初始栈顶高度,每dfs完当前节点的一棵子树就判断栈内(相对于刚开始dfs时)新增节点的数量是否≥B,是则将栈内所有新增点分为同一块,核心点为当前dfs的点,当前节点结束dfs时将当前节点入栈,整个dfs结束后将栈内所有剩余节点归入已经分好的最后一个块。**
+**dfs,并创建一个栈,dfs 一个点时先记录初始栈顶高度,每 dfs 完当前节点的一棵子树就判断栈内(相对于刚开始 dfs 时)新增节点的数量是否 ≥ B,是则将栈内所有新增点分为同一块,核心点为当前 dfs 的点,当前节点结束 dfs 时将当前节点入栈,整个 dfs 结束后将栈内所有剩余节点归入已经分好的最后一个块。**
 
 参考代码:
 
@@ -42,13 +42,13 @@ int main()
 }
 ```
 
-如果你看懂了这个方法的话,每块大小≥B是显然的,下面证明为何每块大小≤3B:
+如果你看懂了这个方法的话,每块大小 ≥ B 是显然的,下面证明为何每块大小≤3B:
 
 对于当前节点的每一棵子树:
 
-- 若未被分块的节点数≥B,那么在dfs这棵子树的根节点时就一定会把这棵子树的一部分分为一块直至这棵子树的剩余节点数≤B,所以这种情况不存在。
-- 若未被分块的节点数=B,这些节点一定会和栈中所有节点分为一块,栈中之前还剩 $[0,B-1]$ 个节点,那么这一块的大小为 $[B,2B-1]$ 。
-- 若未被分块的节点数<B,当未被分块的节点数+栈中剩余节点数≥B时,这一块的大小为 $[B,2B-1)$,否则继续进行下一棵子树。
+- 若未被分块的节点数 ≥ B,那么在 dfs 这棵子树的根节点时就一定会把这棵子树的一部分分为一块直至这棵子树的剩余节点数≤B,所以这种情况不存在。
+- 若未被分块的节点数 = B,这些节点一定会和栈中所有节点分为一块,栈中之前还剩 $[0,B-1]$ 个节点,那么这一块的大小为 $[B,2B-1]$ 。
+- 若未被分块的节点数 < B,当未被分块的节点数+栈中剩余节点数≥B时,这一块的大小为 $[B,2B-1)$,否则继续进行下一棵子树。
 
 对于dfs结束后栈内剩余节点,数量一定在 $[1,B]$ 内,而已经分好的每一块的大小为 $[B,2B-1]$,所以每块的大小都在 $[B,3B)$ 内。
 
@@ -68,9 +68,9 @@ int main()
 
 如果把两条路径上的点全部修改复杂度是和暴力一样的,所以需要做一些处理。
 
-(下文中 $T(u,v)$ 表示 $u$ 到 $v$ 的路径上除 $lca(u,v)$ 外的所有点构成的集合,$S(u,v)$ 代表u到v的路径,$xor$ 表示集合对称差(就跟异或差不多))
+(下文中 $T(u,v)$ 表示 $u$ 到 $v$ 的路径上除 $lca(u,v)$ 外的所有点构成的集合,$S(u,v)$ 代表 $u$ 到 $v$ 的路径,$xor$ 表示集合对称差(就跟异或差不多))
 
-- 两个指针 $cu,cv$ (相当于序列莫队的 $l,r$ 两个指针), $ans$记录$T(cu,cv)$ 的答案,$vis$ 数组记录每个节点是否在 $T(cu,cv)$ 内;
+- 两个指针 $cu,cv$ (相当于序列莫队的 $l,r$ 两个指针), $ans$ 记录 $T(cu,cv)$ 的答案,$vis$ 数组记录每个节点是否在 $T(cu,cv)$ 内;
 - 由 $T(cu,cv)$ 更新至 $T(tu,tv)$ 时,将 $T(cu,tu)$ 和 $T(cv,tv)$ 的 $vis$ 分别取反,并相应地更新答案;
 - 将答案记录到 $out$ 数组(离线后用于输出那个)时对 $lca(cu,cv)$ (此时的 $cu,cv$ 已更新为上一步中的 $tu,tv$) 的 $vis$ 取反并更新答案,记录完再改回来(因为 $lca$ 处理比较麻烦,这样搞比较方便)。
 
@@ -78,7 +78,7 @@ int main()
 
 $\quad\,T(cu,cv)\ xor\ T(tu,tv)$
 
-$=[S(cu,root)\ xor\ S(cv,root)]\ xor\ [S(tu,root)\ xor\ S(tv,root)]$ (lca及以上相消)
+$=[S(cu,root)\ xor\ S(cv,root)]\ xor\ [S(tu,root)\ xor\ S(tv,root)]$ (lca 及以上相消)
 
 $=[S(cu,root)\ xor\ S(tu,root)]\ xor\ [S(cv,root)\ xor\ S(tv,root)]$ (交换律、结合律)