做题记录(一)
做题记录
| 题目名称 | 做题时间 | 标签 |
|---|---|---|
| 小卡与落叶 | 2023.11.26 | |
| 任务查询系统 | 2023.11.26 | |
| TATT | 2023.11.30 | |
| 大融合 | 2023.12.8 | |
| Tourists | 2023.12.13 | |
| 仙人掌图 II | 2023.12.14 | |
| 铁人两项 | 2023.12.14 | |
| 树点涂色 | 2023.12.17 | |
| 派遣与城池攻占 | 2023.12.20 | |
| 数字序列 | 2023.12.21 | ★ |
| 连通图 | 2023.12.24 | Hash、线段树、LCT |
| middle | 2024.1.7 | 可持久化线段树、二分答案、权值下标 |
| No Pain No Game | 2024.1.12 | 循环限制 |
| 树 | 2024.1.17 | 单调答案更新方向 |
| 寻宝游戏 | 2024.1.18 | 树上问题 |
做题记录
小卡与落叶
2023.11.26
题目做法
DFS序
主席树。权值为节点深度,以查询每个区间内的\(规定节点深度\sim n\)的节点个数,显然,序中节点右端点不需要额为建树
题目反思
在用\(\ce{A->T[x]B->T[y]Ans}\)方法时,我们应注意y手段可以结合x手段的性质进行。
以此题为例:如果是在整个DFS序上执行区间覆盖区间和, 如此,则可以被卡成\(\mathcal{O}(N^2)\)。但是继续观察发现所覆盖的区间的所有数都满足深度大于等于上一个操作一,且深度是不会变的。所以可以直接用主席树维护二维信息(下标--->区间,权值线段树--->深度),从而避免修改,快速得到答案。
任务查询系统
2023.11.26
题目做法
主席树。
题目反思
-
自我迭代更新
for(int tm:st[i])Prune(root[i],root[i],a[tm],1); for(int tm:nd[i])Prune(root[i],root[i],a[tm],-1);-
以自己为地板可持久化自己\(\Rightarrow\)自我累加信息
-
将自己与自己合并\(\Rightarrow\)自我复制
-
-
主席树:前缀线段树信息
TATT
2023.11.30
题目做法
这是一道的四维 LIS 问题,类比二维 LIS,我们可以先将第一位排序。接着使用 DP 求解。
为了快速找出另外三维都比它小的数,我们可以用KD树进行维护。
题目反思
KD 树擅长维护多维信息
大融合
2023.12.8
题目做法
题目反思
1.没有删边的LCT可以用树剖将最终形态树先建出来。
2.将树变成序列有两种方法,一是树剖,二是DFS序。
3.建两次,将同一个结构(链、树、图)建两次,第一次处理结构(本题树剖),第二次处理数据(本题树状数组的累加)
4.并查集同样可以维护树形关系,使用路径压缩后就是维护树根,在“建两次”中可以用到。
5.链修改,点查询->点修改,子树查询
6.DFN序中ld是每个点在序中的位置,ld\(\sim\) rd的序列是子树的点
Tourists
2023.12.13
题目做法
园方树+树剖+线段树
题目反思
1.总是在圆点上经行修改
2.园方树是一种通过合理设置权值将无向图等效替代为无根树的方法,解决的问题与缩点相似,可由于保留了原图上的一些关系,所适用的范围更广。其转化为的无根树可以如一般无根树一样照常处理(可以加LCT?)
3.圆点方点分类讨论
仙人掌图 II
2023.12.14
题目做法
Tarjan+DP
题目反思
仙人掌两道题(P4129与P4244)都未真正使用圆方树, 只是利用了环的性质,将环单独处理(Solve函数)
但P5236,CF487E与P4320则真正使用了圆方树,其Solve函数是在对方点设置合理的权值
可以发现建立了圆方树的题目的询问都有“局部性”,也就是某点到某点,并非关注全局信息。
对于关注全局的题目,我们完全可以直接处理而非建圆方树。
对于关注局部的题目,我们不得不用圆方树维护图上位置关系
用搜索树的深度维护路径长度
仙人掌其实是利用整体法将一块点双当作一个整体,运用在具有点双整体性的题目上
铁人两项
2023.12.14
题目做法
考虑固定 \(s\) 和 \(f\),显然有合法 \(c\) 的数量等于 \(s,f\) 之间简单路径的并集的点数减 \(2\)。
每个方点的权值为对应点双的大小,而每个圆点权值为 \(-1\)。这样两圆点间圆方树上路径点权和,恰好等于原图中简单路径并集大小减 \(2\)。问题转化为统计圆方树上 \(\sum\) 两圆点路径权值和。
换个角度考虑,改为统计每一个点对答案的贡献,即权值乘以经过它的路径条数,这可以通过简单的树形 DP 求出。
题目反思
圆方树的一个常用技巧:路径统计时,点赋上合适的权值。
树点涂色
2023.12.17
题目做法
LCT维护形状关系,本题为颜色连续段
线段树维护权值,本题为每个点到根的路径权值
由于本题每次是染一种新颜色,所以可以将每一次染色视作划分一条新的链,其可减性使操作2可以快速完成
题目反思
维护关系+维护权值。
当关系与权值(答案)没有直接好维护的数据结构时,可将其分开处理
派遣与城池攻占
2023.12.20
题目做法
树上左偏树合并
题目反思
像树等由多个点推到一个的结构,可以用可并堆、线段树合并等支持合并的数据结构进行实现,并且及时排除不可能的选项。这两道题都有“最有子结构”的性质,与DP相似。(也许可以优化DP?)
如果是要找最优的一个,将最优的放堆顶;如果是要找符合条件的一群,将不符合条件的放在堆顶以便删除
数字序列
2023.12.21
题目做法
左偏树辅助贪心(数据结构辅助贪心)
首先通过减去下标将单调递增变为单调不降。
假设整个\(a\)序列单调,若\(a_1<a_2<…<a_n\),则\(b_i=a_i\),若\(a_1>a_2>…a_n\),则\(b=a的中位数\)。
所以我们找寻a中各个单调递减区间,将其中位数找出并进行结合,结合方式如下:
对于单调递增序列\((a_1,a_2,···,a_n)\)与单调递增序列\((a_{n+1},a_{n+1},···,a_m)\)设前者中位数为\(u\),后者中位数为\(v\),当\(u<v\)时,直接结合答案。当\(v>u\)时,设b序列为\((b_1,b_2,···b_m)\),易得\(b_n<u,b_{m+1}>v\),转在数轴上思考几何意义(距离),可知对于\(\forall i\in[1,n],|u-b_i|\)要尽可能小,对于\(\forall i\in[n+1,m],|v-b_i|\)要尽可能小。所以b序列可以更优为\(b_n,b_n,\cdots,b_n,b_{n+1},b_{n+1},\cdots,b_{n+1}\),由于\(b_n\)还应上涨,\(b_{n+1}\)还应下降,最终到\(b_n=b_{n+1}=w\)时答案更优,所以b序列为\((w,w,\cdots,w)\)。再次考虑几何意义,可知当\(w\)为\(a\)序列中位数时为最优答案。
那么此时我们就将\((a_1,a_2,···,a_m)\)等价为了\((w,w,\cdots,w)\)。之后只需要与 \(w\) 作比较就行了
在合并两个序列时,由于合并时需要寻找中位数,且在合并时对于前一个序列,中位数只可能减少,于是可以用大根左偏树,进行维护。若堆中元素个数大于a序列真实数据个数的一半,则弹出堆顶
题目反思
-
整体假设法,并转换的局部的关系
-
维护一个单调变化的涉及合并的区间信息时,可以用左偏树进行维护。
-
对比Sonya and Problem Wihtout a Legend,可知。若已知A,求最少的B转换为C。可等价为,已知A,需构造出C,其需要的的B最少
连通图
2023.12.24
题目做法
题目反思
树
题目做法
题目反思
对于单调答案更新方向,可以通过离线的方式找到一种正反两种中更好的方向。如这题,由于并查集可以向上压缩,但压缩后难以复原,所以通过倒序将单调向下的方向变为单调向上从而更新答案
寻宝游戏
题目做法
有一个结论:DFS 序求出后,假设关键点按照 DFS 序排序后是 \({a_1,a_2,\cdots,a_k}\)。
那么所有关键点形成的极小连通子树的边权和的两倍等于 \(dist(a_1,a_2)+dist(a_2,a_3)+⋯+dist(a_{k−1},a_k)+dist(a_k,a_1)\)。
假设插入 \(x\),它DFS序左右两边分别是 \(y\) 和 \(z\)。那么答案加上 \(dist(x,y)+dist(x,z)−dist(y,z)\) 即可。
删除同理。
题目反思
树上距离问题通常可以按照DFS序排序,并得到结论

浙公网安备 33010602011771号