Euler Tour Tree与dynamic connectivity
2016-12-20 17:15
447 查看
Euler Tour Tree最大的优点就是可以方便的维护子树信息,这点LCT是做不到的.为什么要维护子树信息呢..?我们可以用来做fully dynamic connectivity(online).
换根: 因为Euler Tour是一个环,那么我们可以在任意一个k->u的地方切断,然后把这段东西接到最后去,这样就把u变成根了
Link: 先换根,然后添加u->v与v->u的边就好了,也就是把序列变成(u)+u->v+(v)+v->u
Cut : 先换根,然后找到u->v与v->u,切掉就好了
Findroot: 若Euler Tour中的最后一条边是k->u,那么u就是根
那么我们需要维护的就是: 对于每个u任意的一条k->u的指针和每条边对应的指针.
当我们插入一条边, 就在G_0与F_0中加入那条边, 它的level为0.
我们询问时只要询问F_0中是否联通.
当我们删除一条边(u--v:level), 就删除i<=level所有的G_i中的这条边, 然后我们考虑,在如果这次删除将F_i中劈成Sub(u)子树与Sub(v)子树, 我们需要寻找一条替代这条边的边.假设|Sub(u)|<=|Sub(v)|,那么我们在Sub(u)处于G_i中的出边遍历,寻找一条Sub(u)->Sub(v)的边.如果找到了那就是一条替代边,对于遍历到不符合条件的边我们知道它可以插入G_{i+1}中,且level++.
这样每条边最多被遍历到log次,因为每次增加level都会使它所在的最大F_i大小至少减半,而它只会一次担任替代边.
我们考虑使用按秩合并的并查集,那么所有操作都是log的且我们可以回退以前的状态,然后对时间分治就好了.
但是这个做法太不暴力了,而且复杂度没有更优..
其实我们只需要维护对于边的删除时间最大生成树就好了..
LCT 1个log..
Euler Tour Tree
维护将树中的边u--v变成u->v,v->u后的Euler Tour.换根: 因为Euler Tour是一个环,那么我们可以在任意一个k->u的地方切断,然后把这段东西接到最后去,这样就把u变成根了
Link: 先换根,然后添加u->v与v->u的边就好了,也就是把序列变成(u)+u->v+(v)+v->u
Cut : 先换根,然后找到u->v与v->u,切掉就好了
Findroot: 若Euler Tour中的最后一条边是k->u,那么u就是根
那么我们需要维护的就是: 对于每个u任意的一条k->u的指针和每条边对应的指针.
dynamic connectivity
我们维护log(点数)个图G_i以及这些图的生成森林F_i,每个图G_{i+1}都是G{i}删去一些边形成的,我们给每条边附一个权值level表示让这条边出现的最大G_i.当我们插入一条边, 就在G_0与F_0中加入那条边, 它的level为0.
我们询问时只要询问F_0中是否联通.
当我们删除一条边(u--v:level), 就删除i<=level所有的G_i中的这条边, 然后我们考虑,在如果这次删除将F_i中劈成Sub(u)子树与Sub(v)子树, 我们需要寻找一条替代这条边的边.假设|Sub(u)|<=|Sub(v)|,那么我们在Sub(u)处于G_i中的出边遍历,寻找一条Sub(u)->Sub(v)的边.如果找到了那就是一条替代边,对于遍历到不符合条件的边我们知道它可以插入G_{i+1}中,且level++.
这样每条边最多被遍历到log次,因为每次增加level都会使它所在的最大F_i大小至少减半,而它只会一次担任替代边.
dynamic connectivity(offline)
但是其实这个没什么卵用,如果可以离线的话有更简单的做法我们考虑使用按秩合并的并查集,那么所有操作都是log的且我们可以回退以前的状态,然后对时间分治就好了.
但是这个做法太不暴力了,而且复杂度没有更优..
其实我们只需要维护对于边的删除时间最大生成树就好了..
LCT 1个log..
相关文章推荐
- 黑马程序员——>第十五天<集合框架(TreeSet-泛型)>
- 【百度之星2014~复赛 解题报告~正解】The Query on the Tree
- tree路径匹配抽象(2)
- poj 3237 Tree 【LCA转RMQ】 【修改边权 + 修改(a, b)路径边权 + 查询(a, b)路径上最大边权值】
- 机器学习——Gradient Boost Decision Tree(&Treelink)
- Binary Tree Level Order Traversal II
- [leetcode]110. Balanced Binary Tree@Java解题报告
- KD-Tree复习笔记(BZOJ1941 & BZOJ2648 & BZOJ4066)
- LeetCode_Binary Tree Zigzag Level Order Traversal
- Minimum Depth of Binary Tree
- 【LeetCode从零单排】No100 Same Tree && No101 Symmetric Tree
- 查找maven依赖的jar mvn dependency:tree解决多项目多引入jar包版本导致的问题
- LeetCode---Binary Tree Level Order Traversal、Binary Tree Level Order Traversal II解题分析
- LeetCode——101. Symmetric Tree (bfs)
- BZOJ 4154 [Ipsc2015]Generating Synergy(KD-Tree)
- [CF915F]Imbalance Value of a Tree
- TreeView,TreeNode,TreeNodeCollection
- [leetcode]_Binary Tree Inorder Traversal
- Binary Tree Preorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal