首页 > TAG信息列表 > 长链

基础长链剖分

基础长链剖分 基本上整个互联网上长链剖分都是使用 CF1009F 和树上 \(k\) 级祖先两题。本篇也无法避免qwq,因为这两题确实经典。 定义 定义 重儿子 表示其子节点中子树深度最大的子节点。如果没有儿子,就没有重儿子。定义 轻儿子 表示剩余的子节点。重边、轻边、重链的定义和重链剖

长链剖分学习笔记

概念 长链剖分属于链剖分的一种 一般讲的树剖指重链剖分,它可以用于维护树上路径的信息 而长链剖分则是用于维护有关深度的信息 实现 长链剖分的剖分方法与树链剖分极其相似,只需要把以子树大小判断重儿子改成以节点深度判断长儿子即可 有啥用? 它有这么些性质 长链剖分后,所有节点都

虚树,KD-Tree,长链剖分,后缀数组,后缀自动机

真的就是讲课两天,吸收一个月呢! \(1.\)虚树 \(2.\)KD-Tree \(3.\)长链剖分 \(4.\)后缀数组 时间复杂度:倍增求法,复杂度 \(O(nlogn)\) 首先把 \(s\) 的每个后缀字典序排序。 \(sa[i]:\) 排名第 \(i\) 位的是第几个后缀(起始下标)。 \(rk[i]:\) 第 \(i\) 个(起始下标为 \(i\))的后缀的的排

BalticOI2021 The short shank(牢房)

The short shank(牢房) BalticOI 2021 Day2 loj3561 首先,如果我们钦定了哪些位置放床垫,那么第i个位置上的人造反的时间就是\(\min_{j=pre}^{i}t[j]-j+i\),其中pre表示i前面里i最近的床垫。 换句话说,对于一个人i,其在时刻T之间不会造反的条件是存在一个\(j∈[b[i],i]\),并且j在j+1之间

长链剖分

算法简介 \(\quad\)这个数据结构的重儿子是深度最深的节点,这是它和树链剖分唯一的区别。 \(\quad\)它最经典的应用就是求 k 级祖先,预处理的期望复杂度为 O(nlogn),查询 O(1) \(\quad\)设每个节点的重儿子深度为 hson , 每个轻儿子记录往上 hson 长度路径的信息,每一条链头记录自己这

Dominant Indices

长链剖分初学笔记 长链剖分是重链剖分的兄弟,但与CZ宇宙里的兄弟不同的是,他不止三厘米,相反,他是越长越好,越长越好。长链剖分的原理是在统计信息时父亲直接继承某个孩子信息,其它孩子则暴力统计。这个孩子就是长孩子,连接它和父亲之间的边就叫长链。长孩子的定义是从这个孩子向下可以到

CF526G Spiders Evil Plan

一、题目 点此看题 二、解法 网上的很多题解讲的都不清楚,我还是尽量不要避重就轻

树链剖分学习笔记(二)

上一篇:树链剖分学习笔记(一) 这篇是长链剖分 并没有仔细研究过这方面的内容,所以就随便写点简单的东西了 1. 概念 长链剖分也是一种树链剖分,所以和轻重链剖分很相似 区别是长链剖分选择子树深度最大的儿子作为重儿子,而不是子树大小最大的 它也具有一些性质: 链长总和是 \(O(n)\) 级

长链剖分小结

概述: 参考神犇yyb的博客 问题:如何做到\(O(nlogn)-O(1)\)复杂度求解\(k\)次祖先? 常规倍增是\(O(nlogn)-O(logn)\)的,重链剖分是\(O(nlogn)-O(logn)\)的,欧拉序st表能在\(O(nlogn)-O(1)\)复杂度内求两点LCA,但并不能查出k次祖先是谁 长链剖分 方法和树剖十分类似,代码也几乎相同,但我们每

长链剖分

基槽: 优化转移时间复杂度只和深度有关的树形DP 思想: 定义重儿子为深度最大的儿子,每次巧妙地利用数组分配空间的方式(利用dfn序)继承来自重儿子的信息,然后暴力合并亲儿子,均摊时空复杂度\(O(n)\)。 Pf:定义长链为最长的全是由重儿子组成的链,则长链的顶点一定是一个轻儿子,对于每个点,

bzoj4543 长链剖分

为啥我写的都是模板题题解啊 像这种题就得耐心把式子列出来,写出来也不多。为什么某题解用的普通dsu误导人啊,不用长剖写这题的都是毒瘤。 #include<bits/stdc++.h> using namespace std; #define forg(i,x) for(register int i=fir[x];i;i=nxt[i]) #define uu unsigned #define sca

[长链剖分优化dp] Codeforces 1499F

题目大意 给定一棵 \(n(2\leq n\leq 5000)\) 个点的树,求一共有多少种方案,删去若干条边后,分裂出的所有树的直径都不超过 \(K\),答案模 \(998244353\)。 题解 设 \(dp[u][i]\) 表示把以 \(u\) 为根的子树分裂成若干棵直径不超过 \(K\) 的树,且以 \(u\) 为根的树的高度为 \(i\) 的方案

长链剖分O(nlogn)-O(1)求K级祖先

传送门 Code #include <bits/stdc++.h> using namespace std; #define RG register int #define LL long long template<typename elemType> inline void Read(elemType& T) { elemType X = 0, w = 0; char ch = 0; while (!isdigit(ch)) { w |= ch ==

学军11.29网络赛 题解&总结

题面 前一小时被迫打OI赛制。后面自身心情原因打ACM赛制。 A太过毒瘤,在3h多才切。D暴力题恶心死人。 切ABC。后面两题甚至没有心情打部分分,所以在切了A之后我的比赛已经结束了。 300分整个机房最后一名(另外三位440,还有一位500拿rank1) A 一开始就想到做到后面有循环节并且循环节是

20200723训练记录

打了 Comet OJ 的三道题 A是Comet OJ - Contest #1 C B是Comet OJ - Contest #7 D C是Comet OJ - Contest #8 F A是一个超级恶心的状压题,但是有一个不会证明的结论可以水过去 B一眼看出得到极值的A和B一定可以是在某个\(x_i\)处取到,并且\(A<=B\) 发现答案式子有\(A*B\) 直接从小到

【bzoj3522/4543】[POI2014]Hotel加强版(长链剖分+dp)

传送门 神仙题。。简单版本很好做,做法也很多。 加强版\(n\leq 10^5\),显然之前的\(O(n^2)\)的做法时间、空间复杂度都不能承受。 考虑维护以深度有关的\(dp\): \(f[i][j]\)表示以\(i\)为根节点的子树中,深度为\(j\)的点有多少个。 显然这个很好维护,转移\(\displaystyle f[i][j]=\s

【cf1009F】F. Dominant Indices(长链剖分)

传送门 长链剖分模板题。 因为转移跟深度有关,所以我们直接继承深度最大的儿子的信息,其余暴力转移即可。 继承不可能枚举,否则和直接转移复杂度无异,这里利用指针即可。 其余暴力转移根据长链的性质复杂度不超过\(O(n)\)。 代码如下: /* * Author: heyuhhh * Created Time: 2020/6

4.18 省选模拟赛 桥 边双联通分量 长链剖分维护贪心

只存在加边操作 所以每次只对割边有影响。 考虑求出所有的边双联通分量 然后进行缩点。 那么原图就变成了一颗树 且所有边都是割边。 考虑k==1的时候 显然是求出树的直径。 考虑k>1时 一个错误的贪心:把刚才树的直径上的边标记为0 然后再求直径...... 容易构造出反例让其错误。

CF526G Spiders Evil Plan

cf 经过一番思考,可以发现原问题等价于选出\(2y\)个叶子,使得他们两两之间路径的并包含\(x\)且边权和最大(如果\(2y\ge\)总叶子个数则直接输出所有边权值之和).这是因为你可以通过让\(2y\)个叶子两两匹配得到\(y\)条路径,然后\(y\)条路径的并也就是这些叶子两两之间路径的并 先考

高性能短链设计 转

出处: 高性能短链设计       今天,我们来谈谈如何设计一个高性能短链系统,短链系统设计看起来很简单,但每个点都能展开很多知识点,也是在面试中非常适合考察侯选人的一道设计题,本文将会结合我们生产上稳定运行两年之久的高性能短链系统给大家简单介绍下设计这套系统所涉及的一些思

高性能短链设计

前言 今天,我们来谈谈如何设计一个高性能短链系统,短链系统设计看起来很简单,但每个点都能展开很多知识点,也是在面试中非常适合考察侯选人的一道设计题,本文将会结合我们生产上稳定运行两年之久的高性能短链系统给大家简单介绍下设计这套系统所涉及的一些思路,希望对大家能有一些帮助。

CF 150E Freezing with Style [长链剖分,线段树]

\(sol:\) 给一种大常数 \(n \log^2 n\) 的做法 考虑二分,由于是中位数,我们就二分这个中位数,\(x>=mid\)则设为 \(1\),否则为 \(-1\) 所以我们只需要找到一条 \(sum >= 0\) 的路径,这样就有解了,易证。 长链剖分,让长链变成连续的一段区间 \([dfn_u,dfn_u+len_u-1]\),线段树的每个点是对于

长链生成短链的思考

一些业务场景,比如说短信、push需要带上跳转链接,这个时候就需要把长链转换为短链 长链如何转短链?其实长链和生成短链的过程是没有任何关系的,唯一的联系就是生成以后做关联 1:短链生成 结合实际工作中以及网上,大概两种比较常规的方式,默认生成六位短链 方式一:通过移位+简单的算法生成

[WC2010]重建计划 长链剖分 + 线段树

二分以后长链剖分 + 线段树, 扣了半天常数。 好像还用啥nb迭代优化一下二分。 #include<bits/stdc++.h>using namespace std;const int N = (int)1e5 + 7;const double eps = 1e-9;int n, L, U;int head[N], edge_tot;int len[N], son[N], w[N];int in[N], dfs_clock;double tmp[N

The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest E

 题库链接 考虑莫比乌斯, 套上去之后就是变成了统计长度为d的一共有多少路径, 直接长链剖分,  在计蒜客上极度卡常, 卡了一万年才卡过去, 现场好像还有用点分治过去的, 这都能过?? #include<bits/stdc++.h>#define LL long longusing namespace std;const int N = (int)5e5 + 7;const i