数据结构&图论:LCT】的更多相关文章

HDU4010 类比静态区间问题->动态区间问题的拓展 我们这里把区间变成树,树上的写改删查问题,最最最常用LCT解决 LCT用来维护动态的森林,对于森林中的每一棵树,用Splay维护. LCT是把这些Splay关联在一起的数据结构 我们以HDU4010为例子 int n,m,cnt,top; bool rev[maxn]; int mx[maxn],fa[maxn],v[maxn],tag[maxn],last[maxn],q[maxn]; ]; ]; 这里把树存成了图,邻接表表示,对于森林中…
ETT可以称为欧拉游览树,它是一种和欧拉序有关的动态树(LCT是解决动态树问题的一种方案,这是另一种) dfs序和欧拉序是把树问题转化到区间问题上然后再用数据结构去维护的利器 通过借助这两种形式能够完成子树的查询和修改,这是LCT所不能胜任的工作 所谓的ETT就是通过动态维护欧拉序来实现动态树 它能完成换父亲(Cut和Link操作) 修改子树(LCT实现不了) 查询结点到根的信息 当然它对比于LCT还是有局限性的 这些操作通过DFS序+Splay也可以完成 只不过我们通俗地把欧拉序+Splay称…
本来A*就可以搞定的题,为了怕以后卡复杂度,找了个这么个方法 现阶段水平不够就不补充算法分析部分了 对于图G,建立一个以终点t为起点的最短路径构成的最短路径树 (就是反着跑一遍最短路,然后对于一个不为终点的点v,v到终点t的最短路径上(任选一条)v的后继结点为v的父亲,就形成了一棵树) 然后对于所有点,定义其不在最短路径树上的出边的f值为:f[e] = l[e] + dis[e.tail] - dis[e.head] ,就是走这条边,走到t需要多绕的距离 那么我们只要找到第k小的这种边的序列就得…
在这里对图的存储和遍历进行一个规范,为以后更复杂的数据结构学习打下基础 首先是邻接矩阵的形式,适合于存稠密图,如果是全连接图就再合适不过了 int a[maxn][maxn]; 一个二维数组就可以搞定了,如果是bool值那么就是不带权值的 a[i][j]=w表示i->j这条边的权值为w,反之亦然 建图操作是很显然的 ;i<=n;i++) ;j<=n;j++) cin>>a[i][j]; 接下来是一个DFS: int vis[maxn]; void dfs(int dp,int…
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 12266  Solved: 4945[Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值…
动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT(link-cut tree). LCT的大体思想类似于树链剖分中的轻重链剖分(轻重链剖分请移步http://www.cnblogs.com/BLADEVIL/p/3479713.html),轻重链剖分是处理出重链来,由于重链的定义和树链剖分是处理静态树所限,重链不会变化,变化的只是重链上的边或点的权…
前三篇好像变成了SPLAY专题... 这一篇正式开始LCT! 其实LCT就是基于SPLAY的伸展操作维护树(森林)连通性的一个数据结构 核心操作有很多,我们以一道题为例: 例:bzoj 2049 洞穴勘测 要求:加边和删边,询问连通性 其实如果没有删边,裸跑并查集似乎就可以搞定 但由于存在删边,并查集思想受阻,我们要考虑更高级的数据结构 于是LCT横空出世! LCT的核心思想:多棵SPLAY维护虚实树链 首先介绍一下树链剖分问题: 树链剖分问题是将一棵树划分成多条树链的思想,有很多种剖分方法,比…
蒟蒻的LCT解读(1) 前段时间本蒟蒻自学了一下LCT,但是网上的很多资料并不很全,而且作为一个数组选手,我看指针代码真的很麻烦,所以就在这里写一篇数组选手能看懂的代码. LCT的初步了解 LCT全称Link_Cut_Tree,中文名动态树,Tarjan大爷的发明专利. 动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT(link-cut tree)…
动态树是个好玩的东西 LCT题集 预备知识 Splay 树链剖分(好像关系并不大) 动态树(Link-cut tree) 先搬dalao博客 什么是LCT? 动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT(link-cut tree). LCT的大体思想类似于树链剖分中的轻重链剖分,轻重链剖分是处理出重链来,由于重链的定义和树链剖分是处理静态树所…
前言 \(LCT\),真的是一个无比神奇的数据结构. 它可以动态维护链信息.连通性.边权.子树信息等各种神奇的东西. 而且,它其实并不难理解. 就算理解不了,它简短的代码也很好背. \(LCT\)与实边的定义 \(LCT\),全称\(Link\ Cut\ Tree\),中文名动态树. 它的实现有点类似于树链剖分,但树链剖分维护的是重边和轻边(故又称重链剖分),而\(LCT\)维护的则是实边和虚边. 什么是实边? 我们选择一个节点与其一个儿子的连边为实边,与其他儿子的连边为虚边,这里的实边是可以随…