![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 83
x7103
这个作者很懒,什么都没留下…
展开
-
【模板】可持久化并查集
题目链接题目描述给定 nnn 个集合,第 iii 个集合内初始状态下只有一个数,为 iii。有 mmm 次操作。操作分为 333 种:1 a b 合并 a,ba,ba,b 所在集合;2 k 回到第 kkk 次操作(执行三种操作中的任意一种都记为一次操作)之后的状态;3 a b 询问 a,ba,ba,b 是否属于同一集合,如果是则输出 1 ,否则输出 0。输入格式第一行两个整数,n,mn,mn,m。接下来 mmm 行,每行先输入一个数 optoptopt。若 opt=2o.原创 2021-03-02 11:45:44 · 114 阅读 · 0 评论 -
FHQ Treap
FHQ Treap 主要通过 mergemergemerge 和 spiltspiltspilt 两个操作来实现。mergemerge(x,y)merge(x,y)merge(x,y) 要求 xxx 所在子树中的元素均小于等于 yyy 所在子树中的元素,将两棵树合并,并返回合并后的根节点。inline int merge(int x,int y){ if(!x||!y)return x+y; pushdown(x),pushdown(y); if(tr[x].dat<tr[y].dat){原创 2021-03-01 13:09:50 · 125 阅读 · 0 评论 -
虚树
前置芝士LCA虚树,顾名思义,不是真实的树。那么虚树是什么呢?虚树是什么虚树,一般用于树形DP中,此类问题通常询问次数很多但每次询问涉及到的点数很少。若每次询问均对整棵树进行DP,时间复杂度会是不可接受的。所以我们采用虚树这种数据结构。虚树的构建虚树由询问点和询问点的LCA构成。我们可以先处理出原树的dfs序,从dfs序由小到大来遍历询问点,并通过栈来维护:首先,将根节点加入栈;如果栈中只有一个元素,将该点加入栈;#mermaid-svg-OShJVLAiMV.原创 2021-03-02 21:41:30 · 107 阅读 · 0 评论