P3605 [USACO17JAN] Promotion Counting P |
dfs 序 + 主席树 |
对 dfs 序的应用 |
明明权值树状数组就可以了,还差点加上了全部的树链剖分操作 |
/ |
P2590 [ZJOI2008] 树的统计 |
树链剖分 |
/ |
/ |
1. dfn 与原编号的区分 2. 无向图数组两倍 |
P4088 [USACO18FEB] Slingshot P |
离散化 + 树套树/树状数组 |
同样维护二重约束,主席树比树套树更省空间 |
没有看出“绝对值”这一形式化表示导致走了很多弯路 |
当遇到多种情况讨论时要清晰列出,并试着合并部分情况 |
P3168 [CQOI2015] 任务查询系统 |
主席树 |
区间操作 -> 差分操作 |
/ |
空间复杂度常数 & long long |
P8844 [传智杯 #4 初赛] 小卡与落叶 |
(dfs 序 + 主席树/树状数组)or(欧拉序 + 线段树) |
对 dfs 序的应用 & 主席树作前缀数组的可减性 |
/ |
边界情况:未操作时 |
P4148 简单题 |
k-D 树板子 |
/ |
/ |
1. push_up 时特判空节点 2. 闲着没事不要加节点判重,容易写挂 |
P4475 巧克力王国 |
k-D 树(非正解) |
转化为平面几何问题 |
判断矩形在函数上下需要判断四个点(?) |
/ |
P2486 [SDOI2011] 染色 |
树链剖分 / LCT |
区间合并使用结构体封装减少编码复杂度 |
没有考虑到区间合并对每一次合并的普适性 |
1. 特判空区间 2. 合并时区间顺序 |
P4219 [BJOI2014] 大融合 |
LCT |
LCT 维护子树信息需要满足可减性 |
/ |
将要修改的值提到根再修改 |
P2542 [AHOI2005] 航线规划 |
LCT / 树链剖分 |
1. 离线倒序将删边转化为加边 2. 并查集实现动态缩点 3. 赋被删除点点权为 0 模拟删除过程 |
没有想到 3. |
对于 Splay 预先处理好路径上变化(像 reverse 函数)是很重要的 |
P4219 [BJOI2014] 大融合 |
树链剖分 + 并查集 + 树状数组 + 树上差分 |
1. 链修改点查询 --树上差分--> 点修改子树查询,子树信息往往比链上信息更好维护 2. 树状数组动态维护树上差分 |
树状数组不直观,可先由线段树出发再转化为树状数组 |
/ |
P4129 [SHOI2006] 仙人掌 |
缩点(?) |
某些图论问题可转化到搜索树上进行 |
1. 点双连通分量和“仙人”不一样吗(?)2. 如何确定本题高精最高位数 |
高精 *= 的写法 |
P4244 [SHOI2008] 仙人掌图 II |
环形 DP + 树形 DP + 缩点 |
/ |
在仙人掌上进行 DP 的顺序问题(Tarjan 发现环时进行) |
求点双时在取出 to 后停止出栈 |
P4427 [BJOI2018] 求和 |
LCA |
/ |
/ |
取模有减法时要加模数 |
P3273 [SCOI2011] 棘手的操作 |
启发式合并堆 / 线段树合并 |
运用启发式合并来规避左偏树的复杂操作 |
1. 左偏树能做的线段树都能做,如果没思路就用线段树 2. 类似 dijkstra 的 bjt 方法可做到堆元素延迟删除 |
标记之间可能需要抵消 |
Tourists |
圆方树 + 树链剖分 |
1. 圆方树:将方点分为“父亲”“儿子” 2. “父亲只有一个”是树的重要性质 3. 不直接维护方点的值,而是分为几个部分后组合 |
/ |
1. 圆方树:数组开两倍 2. 树链剖分:原编号和 dfn 序区别 |
P2602 [ZJOI2010] 数字计数 |
数位 dp |
数位 dp 套路:先预处理后拼凑 |
/ |
拼凑:1. 注意“卡上界” 2. 用和预处理一样的方法可以省很多事 |
P2657 [SCOI2009] windy 数 |
数位 dp |
/ |
/ |
数位 dp 特判:1. 首位(前导0) 2. 末位:不卡上界 |
P4124 [CQOI2016] 手机号码 |
数位 dp |
发现有约束条件时,给转移方程增维 |
/ |
数位 dp 检查方法: 检查数列是否单增 |
P4127 [AHOI2009] 同类分布 |
数位 dp |
/ |
将 dp 循环顺序改变有时可以节省空间,甚至对卡常有帮助 |
先将所给数拆分到数组中可以省事 |
P3694 邦邦的大合唱站队 |
状压 dp |
1. 10-20 之间的小数据想到状压 dp 2. 基于数据范围小的设计算法 |
/ |
/ |
P3092 [USACO13NOV] No Change G |
贪心 + 状压 dp + 二分 |
/ |
/ |
/ |
P2396 yyy loves Maths VII |
状压 dp |
/ |
/ |
lowbit 优化有 1/2 的常数 |
String painter |
区间 dp |
/ |
区间 dp 的决策包容性往往很高,往往只需要考虑特殊情况 |
/ |
Travelling |
三进制状压 dp |
/ |
/ |
i%Bit[j+1] < Bit[j] 判断是否为 0 技巧 |
You Are the One |
区间 dp |
区间 dp 的决策包容性往往很高,往往只需要考虑特殊情况 |
通过数据范围,要感觉出这是道区间 dp |
/ |
Rectangle Painting 1 |
二维区间 dp(\(O(n^5)\)) |
/ |
/ |
/ |
P2495 [SDOI2011] 消耗战 |
虚树 dp |
/ |
/ |
虚树 dp 建虚树时注意数组开两倍 |
P4410 [HNOI2009] 无归岛 |
仙人掌 dp |
/ |
1. 不要惯性思维看到环形 dp 就两倍数组单调队列,对于只关心相邻状态的,可以强断强连 2. 不要惯性思维看到仙人掌就圆方树,还能 dfs 树 |
/ |
P3233 [HNOI2014] 世界树 |
虚树 dp |
两次搜索在树上求最近“某类点” |
1. 虚树题目最好先把暴力写出来再推广 2. 树上可能可以用一次“对上”+一次“对下”的 dp 解决问题 |
1. 虚树注意特判 1 号节点(Key 数组,head 数组…)2. 虚树注意区分 h[i] 和 i 3. 多测清空 |
P3177 [HAOI2015] 树上染色 |
树形 dp |
1. 将统计路径拆分为分别统计边 2. 树形背包合并严格卡上下界可以做到 \(O(n^2)\)(?)3. “费用提前计算” |
树形 dp 不只可以局限于“一棵子树”内的信息,还可以与整体其他部分挂钩 |
/ |