LCT小记

不用说了,直接上怎么 die(

  1. 千万不要和 Treap 一样写左旋 zig 和右旋 zag,莫名死亡。Splay 只支持一个 rotate 旋一个节点即可。
  2. splay() 之前记得弄一个栈存储 u 到根的 splay 路径,倒序把 flip 标记全部推下来。
  3. access() 中 u 在往上爬的过程中记得要 update(u)。
  4. findroot() 中记得一路走一路推 flip 标记。
  5. findroot() 完记得要 splay(u) 一下,否则复杂度可能会退化(cmd 说的,听起来挺恐怖,因为不会WA,只会T)。
  6. link() 中 fa[u]=v 之后不要 update(v),因为 u 和 v 并不在同一个 splay 中。
  7. cut() 中最后 update(v),因为此时 v 所在的 splay 改变了(u 不用,因为 u 孤家寡人一个)。
  8. 单点修改 change() 时要 splay(x) 后再修改 val 和 update(),否则会对上面的节点产生影响。

如 cmd 所说,15min 敲完,1.5h 调试(((

posted @ 2021-12-23 20:59  CharlieVinnie  阅读(24)  评论(0编辑  收藏  举报