这一片文章我们来谈谈 LCT 在实际操作中的应用。
维护链上信息
「Luogu P3690」【模板】Link Cut Tree
一道模板题,会讲的比较详细。
考虑维护一个 $val_x$ 代表 $x$ 所在 $\texttt{Splay}$ 中 $x$ 的子树异或和。
在查询 $x$ 到 $y$ 的点权和的时候,我们必须先 split(x,y)
,也即将 $x$ 到 $y$ 的路径上的边全部抠出来扔到一个 $\texttt{Splay}$ 上,再将 $x$ 或者 $y$ 旋转到这个 $\texttt{Splay}$ 的根上,所以 $val_{rt}$ 就是答案了。
在修改 $x$ 的点权的时候要先将 $x$ 旋转到所在 $\texttt{Splay}$ 的根上,就可以直接修改,否则就会比较麻烦。
还有一个点,注意到加边和删边操作不保证存在,因此要先判断一下再搞。
代码
1 |
|