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