我说这是我本命数据结构有人信吗(
树剖维护重链,而lct维护实边。
我们令一个子树的树根 到 子树中最后访问的点的路径 是 实边
则最后一次访问的点,到树根的路径,全部为实边
每个点到它的儿子中的边最多有一条实边
splay有很好的性质:能够低代价的合并 / 拆分树
我们对每一条实边用splay维护。splay内部以(原树)深度为key (并不用显式的维护)
fa[i] 维护 i 到 father[i] (原树上的) 的虚边 (实边的fa[i]随便)
关键操作是 access(i) 代表访问点 i,同时维护实边
splay(i),把 i 转到根i ( splay 中的)右子树,即:将 i 指向儿子的实边置为虚边get_leftmost, 找出 splay 中最高的点 ufa[u]的右子树分离 (同 1,2) (将原有的实边转为虚边)fa[u] 所在 splay 合并 (将边 (fa[u],u) 置为实边)
换根操作 makeroot(i)
access(i)(root,i) 上的父子关系发生了改变