动态树入门
好文链接,写的比较好懂....只是这人有点奇怪.....:http://www.aiuxian.com/article/p-2284697.html
代码有的句子很诡异的感觉...
例如说:"由于l变成了一棵树的根,所以splay它
"....
好鬼啊!....不过写的真的很好懂的样子....
同样推荐的有:
<高级数据结构>
<2006-陈首元-维护森林连通性_动态树>
<2007-袁昕颢-动态树及其应用>[感觉这个格外高神一些....有的还是看不懂....]
<LCT 游记-Robert>
[初次见面]
我来到一片广袤无垠的森林,这里居然只有一个种群——大约10^5片点.
森林里当然有很多很多树了,但是刚开始树上一般只有一个点,可是树之间抱着互利共生[其实它们是同一种类,不能叫互利共生]的思想,通常会联合起来变成一棵大树,变成大树就可以A了BRUCE了(雾)
[粗略看了看树]
但是你如果仔细观察的话,树上的叶子之间有两种关系,一个是铁哥们-实边,一个是普通朋友-虚边.当然很多时候友谊关系会变化[为了oier的利益变化,奉献精神啊有木有].
不管怎样,实边总是会构成一条条深度连续而不相同的链[在整个树的形态中由下而上,没有弯折],而且没有一个点会在两条实链中
[oier的出现]
现在这些点们想帮助oier解决问题,oier说:"我希望你们内部团结".
于是一群铁哥们之间[一条实链]就形成了一个名叫splay朋友圈的组织,一颗树被分成了很多个splay.
oier又说:"我还希望你们的一棵树上也要团结"
于是splay之间用虚边连接[每个朋友圈都有人和在这个朋友圈以上的朋友圈的最矮的人是普通朋友]
必要的时候会让这些连接的虚边变成实边,从而完成oier的任务
[splay朋友圈的内部构造]
有了splay这些铁哥们之间就可以在这个splay朋友圈里面旋转旋转了.
不过除了特殊情况,它们之间的相对位置是不会变的
"站在我左边的是比我高的,右边是比我矮的."-Zero说.
朋友圈里等级制度还是有的[虽然会发生旋转]
只有朋友圈的老大[身份老大,身高不一定哦]才知道与另外一个更高层的朋友圈的普通朋友是谁.
其它的人只知道自己在朋友圈里的联系人.
[oier的任务]
[Mission 1 - Splay]
x需要通过旋转成为所在朋友圈的老大.
zig(x),zag(x)...完成任务.
[Mission 2 - Access]
当我们需要构建一条情报通道从初始点x到树顶部时[那里有无线电台,可以让所有的点都与它产生联系]
就需要一种变换Access().
提醒:这是在原树中,所以必须时刻假想朋友圈在原树上的刻画[一条链]
首先将x变成自己朋友圈的老大,这时他有权有势了,于是先踢掉了比自己矮的铁哥们[splay断右子树,在原树中就是断开x下面的链]
而且x成为了老大,于是联系上的其它朋友圈里的联系人y.
"头儿让我传信息"
"那我们是铁哥们了"
这时x融入了上层朋友圈[不过他不是老大了],y不一定是老大,于是它先需要变成朋友圈老大[这时右子树不一定为空,所以还需要将右子树独立出来,rt=true],然后将x纳入它的右子树中
然后y给它现在知道的联系人z打电话
"头儿让我传消息"
"你来吧"
这时y融入了更上层朋友圈[他也不是老大了],z先变成朋友圈老大,安顿好比它矮的,然后将y纳入比它矮的铁哥们中
....循环了
终于它找到了根节点[这个人所在的朋友圈没有上级,而且是最高的点]
"终于找到组织了!"x说.
完成任务.
[Mission 3 - make_rt]
我们需要任命x为新的根节点
首先构造x到根节点的沟通路径,但是x要做新的根节点,他要成为最高的[原本是这个朋友圈里最矮的哦...]
那么这条路上的所有节点都应该在朋友圈里反着站.[树边反着指]
就是将x成为老大后,进行翻转操作.
完成任务.
[Mission 4 - Link]
现在两棵树里的u,v想要认识,
"我们要创造条件啊"Zero说.
于是u成为了所在树的新根节点,然后顺理成章的向上一指,成为了v的新的一棵子树[目前还只是普通朋友].
完成任务.
[Mission 5 - Cut]
u,v两人闹不和了...要解除关系
我们不能违逆啊...
首先让u当上树根,这样另一人v一定在u的某棵子树[因为他们俩认识]下.
在打通这个人与树根的关系[分别前最后一次成为铁哥们...]
然后v当上它们之间的朋友圈老大,跟u交代完后,扔下u成了孤零零的朋友圈老大...[当然u也是原树的根节点]
自己带着跟随自己的兄弟们离开了树...黄昏里萧瑟的背影拉的老长老长...
完成任务.
[离去]
这里的点生物真是机智又可爱啊...但是我还是要离去了...OI大陆还有很多的东西在等着我哦...