Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void access(splay_node *n)
- {
- splay_node *x = n, *y = splay_node::nul;
- while (x != splay_node::nul)
- {
- // 把x旋转到它所在splay的根
- // 这样x的右子树中所有结点都在原图中比它深
- // 左子树中所有节点都比它浅
- x->splay();
- // 把x的右子树改成以y为根的子树
- // 这样相当于在原图中把x的“prefered child”
- // 改为y所在的splay代表的“prefered path”中深度最小的结点
- x->r = y;
- // 因为x的子结点改变了
- // 所以如果在splay中维护了信息的话
- // 需要重新计算x中记录的信息
- // x->maintain();
- y = x;
- x = x->p;
- }
- n->splay();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement