集训内容总结 day2:数据结构

内容:点分治、点分树;LCT;链分治;数据结构辅助建图、数据结构优化算法

搜得到的题不写题面了。有些题没会,是空着的。

P6109

考虑一维使用猫树,另一维使用线段树维护。变成查询线段树某个区间的历史和。

P11343

模拟 dijkstra:找出最小点 + 增广

增广相当于点分树子树内对一个一次函数取 max

可以每个点子树维护一个凸包用来求最小值(?

P8987

全局加一次函数和全局取 min。把全局加一次函数改到取 min 上,变成全局与一次函数取 min。

如果被取 min 影响了就丢到另一个地方维护。这个直接线段树维护修改到的点。接下来是找什么时候点会被丢到线段树上。整体二分即可。

P8990

考虑所有边,如果父亲点亮儿子不点亮说明这个时刻不合法,如果父亲不亮儿子亮了会产生贡献。

先考虑如何判时间合不合法,合法相当于未点亮节点构成连通块。即未被点亮点减去两端都不亮的点等于一。

ABC414G

线段树优化建图做完了。

QOJ9634

我擦,这么牛。

01 操作分别相当于 0 连续段往左,1 连续段往右。用平衡树维护连续段的相撞和其它情况。

似乎很难写,嘟嘟嘟。

QOJ4815

点分治,考虑包含 \(x,u\) 的答案,相当于要选 \(x\)\(u\) 的链。从 \(x\) 开始先序 / 后序分别 dp 就能求出的答案。由于 \(<k\) 的子树可以丢掉,复杂度为 \(O(nk\log\frac{n}{k})\)

QOJ8240

直接维护每个点会一直跳到哪里(相当于中间的重复部分跳过)。

查询时只有最后一个跳可能跳过头,直接做即可。

P8265

呜呜呜不会 LCT。

QOJ9419

呜呜呜不会 LCT。

GYM105667C

dp,对于 \(x\) 相当于找深度比其深且与其不直接相连的点中 \(f(y)+dis(x,y)\) 最小的点。

点分治,考虑直接记录 \(dis(y,rt)\),然后按深度排序的线段树上记录 \(dis(x,rt)\)\(O(1)\) 种情况下的答案(所有 \(dis\) 都能选,不选 \(dis=0\),不选 \(dis\le 1\))。

QOJ2064

相当于查询是否存在一条路径通往 \(x\) 且边的标号递减且均小于 \(qid\)

考虑点分治。对于分治中心 \(x\),先算出每个点最早什么时候到达 \(x\)。然后按到达时间从早到晚扫描线,从 \(x\) 出发到达其他点的时间会不断变晚,但整体的变化量是 \(O(m)\) 的(仅在某个边的可达状态改变时才会改变)。

QOJ7884

连通块太不牛了,不如拆成若干条不交的链。就变成在图上选若干条不交链,贡献是两个端点的最小值。

直接树形 dp 即可,\(f_{i,j}\) 表示钦定端点的值,\(g_i\) 表示子树内整体的答案。推出转移方程后发现可以线段树合并。

P4220

第一棵树上做边分治,就能确定每个点的额外点权。然后相当于另外两个图的虚树继续做。对于第二个图还是边分治,这样跑应该可以做到 \(O(n\log^2 n)\)

如何做 \(O(n\log n)\):第二棵树考虑枚举 lca,则此时相当于求第二棵树的某个子树在第三棵树上的直径。直径的合并可以 \(O(1)\),所以后面的部分都是 \(O(1)\) 的。

posted @ 2025-08-04 17:17  UniGravity_qwq  阅读(33)  评论(0)    收藏  举报