TAT,我的LCT转双旋了】的更多相关文章

这里是rotate和splay函数 void rotate(int x) { ]==x; ch[y][d^]=ch[x][d];pre[ch[x][d]]=y; ch[z][ch[z][]==y]=x;pre[x]=z; ch[x][d]=y;pre[y]=x;maintain(y); } int q[maxn],top; void splay(int x) { for(int i=x;i;i=pre[i]) q[++top]=i; ; while(top) pushdown(q[top--])…
[热烈庆祝ZOJ回归] [首先声明:LCT≠动态树,前者是一种数据结构,而后者是一类问题,即:LCT—解决—>动态树] Link-cut-tree(下文统称LCT)是一种强大的数据结构,不仅可以像树链剖分一样对树上的两点进行询问(权值和.权值的最值……),还可以维护森林的连通性. 学习LCT首推杨哲神犇的<QTREE解法的一些研究>,很详细地解释了LCT的概念及实现 本文则以ZOJ2114一题为例,分析LCT实现过程中的一些事项,并且力求读者对LCT有一个“不次于‘感性’的认识” 叙述过…
基本思路: 首先按照weightA升序排序,然后依次在图中加边,并维护起点到终点路径上weightB的最大值 如果加边过程中生成了环,则删除环中weightB最大的边 由于是无向图,点之间没有拓扑序,所以在建立LCT模型时,可以将原图的边也视为点,这样就转化成了维护路径上的点权最大值(Orz Hzwer) 点的连通性可以用并查集维护 AC code:(其实Splay双旋一次时只需要进行3次update,而代码中舍弃了这个优化) #include <cstdio> #include <cs…
要打mul和add的lct 50000+的mod用unsigned int好了TAT (坑爹没打pc('\n');(静态)调了好久,样例竟然只输出一个,orz,也不提示PE T_T) #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cstdio> using namespace std; ; *],*I=in,*O=out; #…
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--概念篇戳这里 题单 灰常感谢XZY巨佬提供的强力资磁!(可参考XZY巨佬的博客总结) 题单对于系统地学习一个知识点还是有好处的. 所以蒟蒻搜集了各处的LCT题目(其实作为近年新兴的知识点,现有的好题不是很多,有些题树剖也可做) 大概按细化分类进行整理(类比下面的几个细化知识点,会有重复的列举) 同一类中的题目也大概按难度递增吧(太弱了,对每个题的难度定位或许有不准的地方,欢迎讨论!) 维护链信…
前三篇好像变成了SPLAY专题... 这一篇正式开始LCT! 其实LCT就是基于SPLAY的伸展操作维护树(森林)连通性的一个数据结构 核心操作有很多,我们以一道题为例: 例:bzoj 2049 洞穴勘测 要求:加边和删边,询问连通性 其实如果没有删边,裸跑并查集似乎就可以搞定 但由于存在删边,并查集思想受阻,我们要考虑更高级的数据结构 于是LCT横空出世! LCT的核心思想:多棵SPLAY维护虚实树链 首先介绍一下树链剖分问题: 树链剖分问题是将一棵树划分成多条树链的思想,有很多种剖分方法,比…
\(\rm{0x01}\) 闲话 · \(LCT\)的用途以及具体思路 LCT是啥?百度一下的话--貌似是一种检查妇科病的东西?Oier的口味可是真不一般啊 咳,其实在我最近只是浅浅地学了一部分的基础上,窝觉得\(LCT\)其实就是一个用来维护森林连通性的. 嗯--因为其独特的性质所以也可以顺便维护好多东西,什么链上的最大值啊,链上的权值和啊--都可以维护--或者说,LCT是更加全能的树剖. 但其实吧--\(LCT\)打板子是很简单的,但是真正理解却一点儿也不简单.因为本身\(splay\)就很…
洛谷题目传送门 太弱了不会树剖,觉得LCT好写一些,就上LCT乱搞,当LCT维护双连通分量的练手题好了 正序删边是不好来维护连通性的,于是就像水管局长那样离线处理,逆序完成操作 显然,每个点可以代表一个双连通分量,查询就是链的长度-1 连接一条边,如果在LCT中还没连通就link,如果连通了,显然这里会出现一个环,然后暴力缩点,可以把当前辅助树的根节点当做集合的标志节点,然后dfs整个辅助树,把链上的其它点的并查集祖先暴力改成这个标志节点,最后再断开标志节点与子树的连接.总的暴力修改次数不会超过…
概念.性质简述 首先介绍一下链剖分的概念链剖分,是指一类对树的边进行轻重划分的操作,这样做的目的是为了减少某些链上的修改.查询等操作的复杂度.目前总共有三类:重链剖分,实链剖分和并不常见的长链剖分. 重链剖分 实际上我们经常讲的树剖,就是重链剖分的常用称呼.对于每个点,选择最大的子树,将这条连边划分为重边,而连向其他子树的边划分为轻边.若干重边连接在一起构成重链,用树状数组或线段树等静态数据结构维护.这里就不赘述: 实链剖分 同样将某一个儿子的连边划分为实边,而连向其他子树的边划分为虚边.区别在…
上次xuefeng说我的专题总结(初探插头dp)太不适合入门了,所以这次丢一些题解包以外的东西. 关键是我自己也不会...急需梳理一下思路... (让我口胡数据结构???顺便推广一下全世界最短的lct板子反正也没人要来看个热闹啊如果有什么继续压的方法记得告诉我啊) 一段时间之前学过的数据结构,当时理解的不太深刻. 然后lct1专题也是挺久之前做的了,自己再口胡一遍加深一下印象. lct这个东西吧,其实就是链剖. 树链剖分是按照子树大小划分重链,是静态的(虽说也可以麻烦一些动态重构),大多数时候用…