摘要:
可持久化线段树(主席树) 主席树,一个数据结构,能访问到历史版本的数据,常用于可持久化和区间k大值,是线段树的一个升级版。 可持久化的意思是可以访问任意版本的数据,一眼想到的暴力做法就是开n个数组来记录,这显然是不可取的。 那么我们考虑优化。若只有单点修改,不难发现每两个版本的差别最多为1,那么我们 阅读全文
摘要:
虚树常常被使用在树形dp中,当一次询问仅仅涉及到整颗树中少量结点时,为每次询问都对整棵树进行dp在时间上是不可接受的。此时,我们建立一颗仅仅包含部分关键结点的虚树,将非关键点构成的链简化成边或是剪去,在虚树上进行dp。 虚树包含所有的询问点及它们之间的lca。显然虚树的叶子节点必然是询问点,因此对于 阅读全文
摘要:
## Prufer 序列 Prufer 序列可以将一个带标号 $n$ 个节点的树用 $[1,n]$ 中的 $n-2$ 个整数表示,即 $n$ 个点的完全图的生成树与长度为 $n-2$ 值域为 $[1,n]$ 的数列构成的双射。 Prufer 序列可以方便的解决一类树相关的计数问题,比如凯莱定理:$n 阅读全文
摘要:
动态 DP 简称 DDP(Dynamic Dynamic Programming),其本质是用 矩阵 维护带修改的动态规划问题。 # 1.算法介绍:树链剖分写法 ## 模板:[P4719 【模板】"动态 DP"&动态树分治](P4719) > 给定一棵 $n$ 个点的树。$i$ 号点的点权为 $a_ 阅读全文
摘要:
点分治就是把分治搬到了树上,其核心思想仍然是分治:将问题经过处理后,转化为同类型的,规模更小的问题求解。 # 静态点分治 ## Ⅰ.[P3806 【模板】点分治1 ](https://www.luogu.com.cn/problem/P3806) 题意:给定一棵带权无根树,问是否有点对的距离为 $k 阅读全文
摘要:
一些基础板子,不打算新开一篇学习笔记,就都整理在这里。 # Ⅰ.LCA ## 1.倍增 预处理和单次查询的复杂度分别为 $O(nlogn)$ 和 $O(logn)$,空间 $O(nlogn)$。 倍增预处理 $i 的 $2^k$ 级祖先,记为 $f_{i,k}$,求出每个节点的深度 $d_i$ 。 阅读全文
摘要:
# 块状链表(尚未完善) 对于线性表,可以 $O(1)$ 的访问,但是插入和删除操作是 $O(n)$ 对于链表,可以 $O(1)$ 的进行插入和删除,但是是 $O(n)$ 的访问。 于是本着分块的思想,有了块状链表 。 大概长这个样子。每个块的大小数量级在 $O(\sqrt{n})$ , 块数的量级 阅读全文
摘要:
本文主要讲述这三种常见距离算法 :欧氏距离,曼哈顿距离,切比雪夫距离 。 ## 1.欧氏距离 **欧氏距离** 是最易于理解的一种距离算法。在数学的平面直角坐标系中,设点 $A,B$ 的坐标分别为 $A(x_1,y_1),B(x_2,y_2)$,求点 $A,B$ 之间的距离,我们一般会使用如下公式: 阅读全文
摘要:
## Ⅰ.LYK loves string ![](https://img2023.cnblogs.com/blog/2751294/202308/2751294-20230816143827872-1259681339.png) 通过限定元素的先后可以将 $10^10$ 优化成 $10!$ ,再加 阅读全文
摘要:
# 启发式合并 启发式合并核心思想就一句话:把小集合的合并到大的里。 启发式合并思想可以放到很多数据结构里,链表、线段树、甚至平衡树都可以。 考虑时间复杂度,设总共有 $n$ 个元素,由于每次集合的大小至少翻倍,所以至多会合并 $logn$ 次,总的复杂度就是 $O(nlogn)$ 的(结合线段树合 阅读全文