link-cut tree

动态树(准确说是维护森林)之一,支持连边,断边,求链上权值和等操作。

splay基础:会rotate和splay就行。还要会一点区间反转操作打标记。很基♂础的东西。

有重链,每条重链用splay来维护,splay中排名为这条重链中深度值,顺便把链的要维护信息(譬如链上点权和)统计了。

边分实边和虚边,实边有ch数组记录,虚边则没有。都有fa数组记录。
虚边链接两条重链。父子关系即原树的父子关系。

连到父亲的边为虚边的点就是这条重链的splay的根。

splay

splay(x)。先从上往下下放一遍,再执行splay。
注意rotate中如果y-z的边是虚边不用往回连。

access

access(x)。最主要操作&&最耗时间的操作,没有之一。

拉一条从x所在树的根节点到x的链。

从x开始往上拉,y初始化为0,每次先splay(x),x左子树为连上去的重链,右子树为连下去的重链。
断掉右子树的边,连成y。(断边指实变虚

makeroot

makeroot(x)。将x变成x所在树的根。
先access(x),这时有一条从root到x的重链。
然后splay(x),再在x上打一个反转标记(这条重链上的深度要反转)

split

split(x,y)。搞出一条重链,两端点为x和y。
makeroot(x),access(y),splay(y)。
不多解释了?
(我习惯把这个直接写进代码,so看不到split函数)

link

link(x,y)。连一条x-y的边。
makeroot(x),然后将FA♂x置为y。
这里连轻边没事的。

cut

cut(x,y)。割♂掉x-y的边。
split(x,y),然后x在y左儿子处不解释。
FA♂x=ch[y][0]=0。

find

找到x所在树的根。主要用于判断连通性???
先access(x),splay(x),再一直往左边走就找到根了。不解释了。。。

写到这里吧。

已经做了的板子题:
洞穴勘测
弹飞绵羊

【无图慎入】Link Cut Tree 总结的更多相关文章

  1. link cut tree 入门

    鉴于最近写bzoj还有51nod都出现写不动的现象,决定学习一波厉害的算法/数据结构. link cut tree:研究popoqqq那个神ppt. bzoj1036:维护access操作就可以了. ...

  2. LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)

    为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...

  3. Luogu 3690 Link Cut Tree

    Luogu 3690 Link Cut Tree \(LCT\) 模板题.可以参考讲解和这份码风(个人认为)良好的代码. 注意用 \(set\) 来维护实际图中两点是否有直接连边,否则无脑 \(Lin ...

  4. Link/cut Tree

    Link/cut Tree 一棵link/cut tree是一种用以表示一个森林,一个有根树集合的数据结构.它提供以下操作: 向森林中加入一棵只有一个点的树. 将一个点及其子树从其所在的树上断开. 将 ...

  5. Link Cut Tree学习笔记

    从这里开始 动态树问题和Link Cut Tree 一些定义 access操作 换根操作 link和cut操作 时间复杂度证明 Link Cut Tree维护链上信息 Link Cut Tree维护子 ...

  6. Link Cut Tree 总结

    Link-Cut-Tree Tags:数据结构 ##更好阅读体验:https://www.zybuluo.com/xzyxzy/note/1027479 一.概述 \(LCT\),动态树的一种,又可以 ...

  7. 学习笔记:Link Cut Tree

    模板题 原理 类似树链剖分对重儿子/长儿子剖分,Link Cut Tree 也做的是类似的链剖分. 每个节点选出 \(0 / 1\) 个儿子作为实儿子,剩下是虚儿子.对应的边是实边/虚边,虚实时可以进 ...

  8. Codeforces Round #339 (Div. 2) A. Link/Cut Tree 水题

    A. Link/Cut Tree 题目连接: http://www.codeforces.com/contest/614/problem/A Description Programmer Rostis ...

  9. 洛谷P3690 Link Cut Tree (模板)

    Link Cut Tree 刚开始写了个指针版..调了一天然后放弃了.. 最后还是学了黄学长的板子!! #include <bits/stdc++.h> #define INF 0x3f3 ...

随机推荐

  1. [翻译] SCViewShaker

    SCViewShaker https://github.com/rFlex/SCViewShaker About A highly configurable UIView category for s ...

  2. Linux ntpdate命令详解

    ntpdate命令用于同步更新互联网时间,或者NTP服务器时间 NTP服务器[Network Time Protocol(NTP)]是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源 ...

  3. docker 自制alpine-lnp镜像

    简单粗暴点吧 jenkins 镜像下载:docker pull jenkins:alpine dockfile 原地址:https://gist.github.com/phith0n/373cc078 ...

  4. 超强IIS站点工具一键设置PHP,支持多个PHP同时运行

    PHPWAMP8.8.8.8IN支持三大主流Web服务器:iis.apache.nginx NGINX站点管理.IIS站点管理.Apache站点管理均支持php多版本同时运行,无限自定义mysql.p ...

  5. Array.prototype.reduce 的理解与实现

    Array.prototype.reduce 是 JavaScript 中比较实用的一个函数,但是很多人都没有使用过它,因为 reduce 能做的事情其实 forEach 或者 map 函数也能做,而 ...

  6. DA-GAN技术【简介】【机器通过文字描述创造图像】

    [题外话:今天上课我做了一个关于DA-GAN技术的ppt演讲,写一点东西留念一下...] 转载请注明出处:https://www.cnblogs.com/GraceSkyer/p/9107471.ht ...

  7. virtualbox+vagrant学习-2(command cli)-18-vagrant ssh-config命令

    SSH Config 格式: vagrant ssh-config [options] [name|id] 这将从SSH直接将SSH配置文件的有效配置输出到正在运行的vagrant 计算机(而不是使用 ...

  8. virtualbox+vagrant学习-2(command cli)-19-vagrant box命令

    Status 格式: vagrant status [name|id] options只有 -h, --help 这将告诉你vagrant正在管理的机器的状态. 很容易就会忘记你的vagrant机器是 ...

  9. 在不升级 mysql 的情况下直接使用 mysql utf8 存储 超过三个字节的 emoji 表情

    由于现在数据库的版本是5.5.2,但是看网上说要直接存储emoji表情,需要升级到5.5.3然后把字符集设置为utf8mb4,但是升级数据库感觉属于敏感操作. 考虑了多久之后直接考虑使用正则来替换,但 ...

  10. 利用grep命令查找字符串分析log文件的一次实践

    需求场景: 我需要分析一个服务器访问日志,分析百度蜘蛛这个月对求索网页面的抓取情况. 分析问题: 我的一个access.log文件大小有35M,不可能直接通过打开查看.我需要过滤掉一些没有的信息,只保 ...