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打个标记即可

时间: 2024-11-10 02:32:39

lct各类操作小记录的相关文章

链表各类操作详解

 链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个“头指针”变量,以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址.因此,head指向第一个元素:第一个元素又指向第二个元素:……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束.        链表的各类

C语言链表各类操作详解

链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个“头指针”变量,以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址.因此,head指向第一个元素:第一个元素又指向第二个元素:……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束.        链表的各类操

java学习中,面向对象的三大特性:封装、继承、多态 以及 super关键字和方法的重写(java 学习中的小记录)

java学习中,面向对象的三大特性:封装.继承.多态 以及 super关键字和方法的重写(java 学习中的小记录) 作者:王可利(Star·星星) 封装     权限修饰符:public 公共的,private 私有的     封装的步骤:          1.使用private 修饰需要封装的成员变量.          2.提供一个公开的方法设置或者访问私有的属性              设置 通过set方法,命名格式:     set属性名();  属性的首字母要大写 访问 通过ge

COM 学习小记录

COM组件程序:模块,它可以是 动态连接库(DLL) && 可执行程序(EXE),称为 进程内组件(in-of-process component) && 进程外组件(out-of-process component). COM对象:建立在二进制可执行代码级的基础上,因此COM对象是语言无关的,这一特性使得使用不同编程语言开发的组件对象进行交互成为可能. COM标准:规范 && 实现.规范:定义了组件和组件之间的通信机制,不依赖于特定的语言和操作系统:实现:

laravel 数据库操作小例子

public function demo() { $res = null; //insert数据插入 //$user=array('username'=>'joy','password'=>'123456','age'=>23); //$res = DB::table('users')->insert($user); /* 数据查询 $res = DB::table('users')->where('username','joy')->get(); $res = DB:

一对多关系 操作小总结

1.如果让一的一方维护关系,取决于的因素有1.在一的一方的映射文件中,set元素的inverse属性为default/false 2.在客户端的代码中,通过一的一方建立关系3.session.save/update方法是用来操作表的,和操作关系没有关系2.怎么样采用级联的方法通过保存一个对象从而保存关联对象1.如果session.save操作的对象是A,这个时候应该看A.hbm.xml,看set元素中cascade是否设置有级联保存2.在客户端通过A建立关联3.在客户端执行session.sav

网页小记录

两个页面之间传递中文参数,编码: String strPtname = request.getParameter("ptname"); strPtname = new String(strPtname.getBytes("ISO-8859-1"), "UTF-8"); 网页小记录,布布扣,bubuko.com

java学习中,object 对象的使用(toString、equals、hashCode)(java 学习中的小记录)

java学习中,object 对象的使用(java 学习中的小记录)作者:王可利(Star·星星) object 对象(参考API学习) 重点掌握三个方法: 1.toString 返回该对象的字符串表示. 2.equals(object obj)指示其他某个对象是否与这个对象相等. 3.hashCode() 返回对象的哈希码. 详见代码的注释分析(一个是Person类重写方法,一个是Star类使用方法) Star类代码: 1 package study; 2 3 public class sta

VS 2010 C#入门操作小技巧

*推荐C#入门教学视频(http://www.51xue8.com/e/DownSys/play/?classid=27&id=6719&pathid=3&jishu=17) VS 2010 C#入门操作小技巧 1.认识VS2010:阅读技术文档或者教学视频对入门帮助很大! (1)添加类库 点击解决方案名称(如12.demo)右键->添加->类->更改类名 (2)利用控件设计界面 常用控件:button/label/textbox/combobox: 具体控件用途