
数据结构
文章平均质量分 77
lqhsmash
这个作者很懒,什么都没留下…
展开
-
Link Cut Tree 应用五
2022年02月10日,第二十天1. 题目链接:P4219 [BJOI2014]大融合思路:LCTLCTLCT 解决,时间复杂度 O(nlog n)O(nlog\ n)O(nlog n) 。LCTLCTLCT 维护子树信息的模板题。总所周知,LCTLCTLCT 的实边形成的实链是用来维护树链信息的,除了实边之外,还存在着一种虚边,我们定义以下两个数组:isum[i]isum[i]isum[i] ,表示第 iii 个结点所有虚边连向的结点 jjj 的子树的结点隔宿;siz[i.原创 2022-02-10 00:47:03 · 413 阅读 · 0 评论 -
Link Cut Tree 应用四
2022年02月08日,第十八天1. 题目链接:P4234 最小差值生成树思路:LCTLCTLCT 加并查集解决,时间复杂度 O(nlog n)O(nlog\ n)O(nlog n) 。Warning!!!Warning!!!Warning!!! 这题有自环,搞得自闭了 QAQQAQQAQ。我们利用双指针的思想,求解最大值与最小值差值的最小值,当固定好了最大值,我们尽可能让最小值更大,这样差值就会变小,基于这个原则,我们枚举每一个最大值,换句话说,我们将边权排序,按边权从小到大枚.原创 2022-02-08 23:01:06 · 328 阅读 · 0 评论 -
Link Cut Tree 应用三
2022年02月06日,第十七天1. 题目链接:P2542 [AHOI2005] 航线规划思路:LCTLCTLCT 加并查集解决,时间复杂度 O(nlog n)O(nlog\ n)O(nlog n) 。我们发现正序删边是不好来维护连通性的,基于正难则反原则,我们可以离线处理,逆序完成操作。显然,每个点可以代表一个双连通分量,查询就是链的长度减一,也就是桥的数量。连接一条边,如果在 LCTLCTLCT 中还没连通就 linklinklink ,如果连通了,这里会出现一个环,然后我们.原创 2022-02-06 23:41:59 · 323 阅读 · 0 评论 -
Link Cut Tree 应用二
2022年02月04日,第十六天1. 题目链接:P2147 [SDOI2008] 洞穴勘测思路:LCTLCTLCT 在线解决,时间复杂度 O(mlog n)O(mlog\ n)O(mlog n) ,常数巨大。模板题,不必多言。#include <bits/stdc++.h>#define ull unsigned long long#define ll long long#define re register#define endl '\n'using .原创 2022-02-05 10:58:39 · 660 阅读 · 0 评论 -
Link Cut Tree 应用一
2022年02月03日,第十五天1. 题目链接:P3203 [HNOI2010]弹飞绵羊思路1:LCTLCTLCT 解决,时间复杂度 O(nlog n)O(nlog\ n)O(nlog n) ,常数巨大。已知题目的所有操作都与结点编号相关,我们将一个点 uuu 跳到另一个点 u+ku+ku+k 连一条边,表示被弹一次,由于弹出 nnn 号点即为弹飞,我们设 u+ku+ku+k 大于 nnn ,都为到 n+1n+1n+1 号点。这样我们 split(u,n+1)split (u, .原创 2022-02-03 21:41:30 · 791 阅读 · 0 评论 -
初识动态树—— Link Cut Tree
2022年02月01日,第十四天前言:以下笔记是参考博客:LCT总结——概念篇 (侵删)一、概念性质链剖分,是指一类对树的边进行轻重划分的操作,这样做的目的是为了减少某些链上的修改、查询等操作的复杂度。目前总共有三类:重链剖分,实链剖分和不常见的长链剖分。重链剖分,实际上我们经常讲到树剖,就是重链剖分的常用称呼。对于每个点,选择最大的子树,将这条边划分为重边,而连向其它子树的边划分为轻边。若干重边连接在一起构成重链,用树状数组或线段树等数据结构维护。实链剖分,同样将某一个儿子的连边划分为实边.原创 2022-02-01 21:35:06 · 698 阅读 · 0 评论 -
树链剖分——轻重链剖分
2022年01月27日,第十三天1. 题目链接:P3384 【模板】轻重链剖分/树链剖分思路:树链剖分直接搞,时间复杂度为 O(nlog2n)O(nlog^2n)O(nlog2n) ,通过模板题,我们可以了解到,树链剖分是用来划分树的路径的一个有效工具,它把任意两点之间的简单路径划分成 O(log n)O(log\ n)O(log n) 段线性区间,当我们得到 dfsdfsdfs 序之后套上线段树时,能够轻松地维护树上的某条链的信息。细节看代码注释。#include <b.原创 2022-01-28 01:05:30 · 893 阅读 · 0 评论 -
平衡树例题
2022年01月19日,第六天平衡树若干练习……1. 题目链接:P3224 [HNOI2012]永无乡下面提供两种思路,第一种的时间复杂度是 O(n logn)O(n\ log n)O(n logn) ,第二种的时间复杂度是 O(n log2n)O(n\ log^2n)O(n log2n) ,本来两种算法的时间复杂度有挺大差异,但跑起来效率差不多,可能线段树合并常数稍大。思路一:权值线段树合并直接搞#include <bits/stdc++.h&g.原创 2022-01-19 23:47:04 · 842 阅读 · 0 评论 -
C-Shuffle Cards平衡树
2022年01月18日,第五天题目链接:C-Shuffle Cards_2021牛客国庆集训派对day3学了几个平衡树回去翻了翻国庆积分赛的题,发现原来就是模板题,只能说自己学太少了QWQ。下面提供三个思路,并且了解了平衡树实际上是用来维护树的中序遍历。思路一:使用 FHQ treapFHQ\ treapFHQ treap 直接移动区间#include <bits/stdc++.h>#define ll long longusing namespace s.原创 2022-01-18 22:53:42 · 436 阅读 · 0 评论 -
平衡树之 Splay 伸展树
2022年01月17日,第四天五. 平衡树—— SplaySplaySplay 伸展树伸展树之所以叫做伸展树,是因为其核心操作是伸展 (splaying)(splaying)(splaying) 。伸展就是把一个结点通过 旋转 调整到某个结点处,一般都是伸展到根结点。旋转就是 AVLAVLAVL 树中的左旋和右旋,不过在这里似乎有了更高级的名字:左旋 (ZAG)(ZAG)(ZAG) 和右旋 (ZIG)(ZIG)(ZIG) 。伸展树非常灵活,可以用它完成许多别的操作,诸如分裂,合并,区间操作,搞.原创 2022-01-17 22:52:31 · 379 阅读 · 0 评论 -
平衡树之文艺平衡树(维护区间)
2022年01月16日 第三天平衡树——文艺平衡树(维护区间)首先我们需要知道如何用 fhq Treapfhq\ Treapfhq Treap 来实现区间操作例如,要操作的区间为 [l, r][l,\ r][l, r] ,那么我们就在 fhq Treapfhq\ Treapfhq Treap 里把这一段直接 splitsplitsplit 拆出来进行操作然后再合并回去。按大小分裂:把树拆成两颗树,其中一颗树的大小等于给定的大小,剩余部分.原创 2022-01-16 22:16:31 · 1776 阅读 · 0 评论 -
平衡树之FHQ Treap(无旋)
平衡树——FHQ TreapFHQ\ TreapFHQ Treap(无旋)学习 fhq Treapfhq\ Treapfhq Treap 之前,要先了解普通的 TreapTreapTreap 是怎么回事。TreapTreapTreap ,就是 TreeTreeTree 加 HeapHeapHeap 。 它让平衡树上的每一个结点存放两个信息:值和一个随机的索引。其中值满足二叉搜索树的性质,索引满足堆的性质,结合二叉搜索树和二叉堆的性质来使树平衡。这也是 TreapT原创 2022-01-16 00:23:39 · 1390 阅读 · 0 评论 -
平衡树之替罪羊树
2022年01月14日,第一天平衡树——替罪羊树(无旋)核心操作:暴力重构,时间复杂度 O(log n)O(log\ n)O(log n)。结点,替罪羊树的每个结点需要储存这几个信息:左右子树编号当前结点的值以当前结点为根的树的大小和实际的大小删除标记struct node { int l, r, val; int size, fact; bool exist;}tzy[N];int cnt, root;void newnode (i.原创 2022-01-14 20:51:11 · 184 阅读 · 0 评论