lct各类操作小记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lct各类操作小记录相关的知识,希望对你有一定的参考价值。

学习了一下lct,觉得access和splay都是小问题,背背板子都可以解决,那么就按照这两个基本操作,有很多不同的转换,很多实际运用。

access:使它到根节点上的边都为重边,且与它的重儿子切断

No.1 move_to_root(x),将x设为原树的根,将x到根上的点形成一棵splay,但是此时x只是辅助树的根,所以要将它变为原树的根,只需将它们的深度全部反调,然后就可以了。

void move_to_root(int x)
{
    access(x);
    splay(x);
    reverse(x);
}

No.2 find_root(x),找到x在辅助树中的根,这个比较好理解,直接向上找就行了

No.3 link(x,y) (无向图)

void link(int x,int y)
{
    access(x);
    fa[x]=y;
}

No.4 cut(x,y) 将x变到主树的根中,然后将y access+splay

void cut(int x,int y)
{
    move_to_root(x);
    access(y);
    splay(y);
    fa[x]=0;
    c[y][0]=0;
}

No.5 链上修改,及要使一条链上的节点恰好在一个splay中

void split(int x,int y)
{
    move_to_root(x);
    access(y);
    access(x);
}

x->y上所有路径都在以y为子树的树中,只需要对y打个标记即可

 

以上是关于lct各类操作小记录的主要内容,如果未能解决你的问题,请参考以下文章

java学习中,DVD管理系统纯代码(java 学习中的小记录)

工作小记录

整理eclipse,升级jdk环境小记录

java学习中,匿名函数构造方法构造代码块构造方法中调用构造方法(java 学习中的小记录)

mysql数据库备份小记录

关于list,字符串的小记录