随笔分类 - 数据结构
摘要:SP10707 COT2 - Count on a tree II 参考:树上莫队 树上莫队和普通的莫队差不多,只是把区间从普通的数组,转到欧拉序上(其实也就是括号序) 该问题求解的是 x,y 两个点之间的最短路径上,有多少个不同颜色的点 对于这个问题,分两种情况讨论 \(lca(x,y)=x\ o
阅读全文
摘要:D - Cut 对于一道题目,如果没有别的想法,那么就可以先从它的朴素解法入手,然后再想能不能找到优化它的方法。 对于这道题而言,朴素的解法就是用一个数组来维护每一个位置失配的最远位置,可以开一个数组进行记录。但是在最极端的情况下,每次查询会被卡成的,所以,这个地
阅读全文
摘要:1007 Tree 这道题的解题思路就是树形 dp,在求解过程中,尤其要注意 k 为0和1的时候的情况讨论。细节决定了这道题能不能A。 // Created by CAD #include <bits/stdc++.h> #define ll long long using namespace st
阅读全文
摘要:求第k个父亲节点 参考:树上倍增的写法和应用(详细讲解,新手秒懂) // Created by CAD #include <bits/stdc++.h> using namespace std; const int maxn=5e5+5; vector<int> g[maxn]
阅读全文
摘要:###倍增法求最近公共祖先 参考:题解 P3379 【模板】最近公共祖先(LCA) 参考:树上倍增的写法和应用(详细讲解,新手秒懂) // Created by CAD #include <bits/stdc++.h> using namespace std; const int maxn=5e5+
阅读全文
摘要:"D. Multiset" 后面才知道 的复杂度是的,所以 t 了很多次。 当需要进行很多次插入和删除第 k 位数这两种操作的时候,可以用树状数组来对其进行优化, 表示的就是 i 这个数在当前序列里排的位置,求第 k 位数的大小可以用二分进行优化,这样复杂度就是$O(log(log(n)
阅读全文
摘要:树的直径及其性质 参考: "树的直径及其性质与证明" ①直径两端点一定是两个叶子节点 ②距离任意点最远的点一定是直径的一个端点,这个基于贪心求直径方法的正确性可以得出 ③如果第一棵树直径两端点为,第二棵树直径两端点为,用一条边将两棵树连接,那么新树的直径一定是$u,v,x
阅读全文
摘要:"B. 齐心抗疫" 树的直径有一个性质,即对于树上的每一个点,要找到一个最短路距离最远的点,结果一定是直径的两端点之一 所以遍历 n 个点,每次都假设当前点为 值较大点,然后找到一个距离最远的点,即直径的端点,最后贪心即可。
阅读全文
摘要:"C2 Skyscrapers (hard version)" 分别用 表示在 i 位置能取到的左边的值之和,右边的值之和。 利用单调栈的思想。 降低复杂度的方法是,充分利用重复计算的数据,将其保存下来,避免多次计算。
阅读全文
摘要:"E. 1 Trees and Queries" 该题需要用 lca 进行优化。 在树中求两点间的距离的方法为:
阅读全文
摘要:分块 数据: 初始化: 区间查询: 区间更新和区间查询差不多,有些时候需要用一个 来进行整块区间的加减操作。
阅读全文
摘要:"K th Number" 两种写法:分块、线段树(归并树) 区间种第 k 个数的特点是:①在区间中不超过 x 的数不少于 k 个②在区间中小于 x 的数有不到 k 个 分块: 所以可以对答案进行二分,然后在判断是否满足的时候利用分块进行优化。 如果直接用作为桶的大小的话,复杂度
阅读全文
摘要:"A Simple Problem with Integers" 这道题目只涉及区间修改以及区间查询,所以只要我们利用线段树或者树状数组进行优化,这道题就很容易解决了。 树状数组:因为树状数组本质上之能涉及单点更新,所以,当遇到区间更新的时候,可以尝试将其通项分解为 n 个维度,这样就可以通过 n+
阅读全文
摘要:"Crane" 因为这道题需要需要对数据进行多次修改以及多次查询,而且涉及区间修改,所以最高效的办法就是利用线段树对其进行优化。
阅读全文
摘要:"食物链" 因为不知道要输入的 x ,是属于A,B,C,哪个位置上的,所以把空间开了三倍,每一种状态都保存一下 如果 x 与 y 同类,那么 为`true`。 如果 x 吃 y 那么, 为`true` 这个题卡的点在于, 会卡 ,所以应该用 进行读入 代码:
阅读全文
摘要:并查集(防退化) 防退化的关键操作在于,记录每一个点的高度,合并的时候,将高度较小的点并到高度较大的点上去。 同时还有一个优化技巧就是路径压缩,它会改变树的高度,但是为了方便起见,也不修改 high 的值 合并操作:
阅读全文
摘要:"E Common Number" 参考: "Codeforces Round 608 (Div. 2) E Common Number (二分 思维 树结构)" 具体做法可详见参考博客。 关键在于在分了奇偶之后,就是有序的了 在数据范围很大的时候,要尝试降低其复杂度,对答案进行二分就是一种降低复杂
阅读全文