tricks & tips 2
一些零散的知识
tricks & tips 1
- 两个配对的点连线有交点(形如
x1 y1 x2 y2 的匹配)是否出现可以考虑按照括号序列那样搞(「ARC076C」Connected?)。
- 相互独立的量可以分开考虑;区间 max 的贡献范围 \(\to\) 单调栈,注意左边 / 右边要取等(「ARC067D」Yakiniku Restaurants)。
- 从根到点 \(i\) 的所有路径都要经过点 \(x\),则点 \(x\) 支配点 \(i\)。这种情况一般可以考虑建支配树。DAG 的支配树用增量法 + 倍增 LCA 求(2022.6.23 考试 T2 蒸蒸日上(upupup))。
- 看到博弈题不要怕,先用对抗搜索打表找规律,多想想异或之类的(2022.6.24 考试 T1 七管荧光灯(qgygd))。
- 选的数在区间 \([l,r]\) 中 \(\to\) 找出所有的点离散化后按照区间编号 dp(「APIO2016」划艇)。
- 用 map 把大数离散化卡常(「洛谷 P7091」数上的树)。
- dp 时贡献是一段区间可以用差分优化(「CF1156F」Card Bag)。
- 平面上三点求夹角可以用余弦定理或者求出两边的角度后作差(2022.6.25 考试 T1 无题(noname))。
- 位运算 \(\to\) 按位!!!“最小”之类的可以考虑按位贪心,猜猜性质啥的(2022.6.25 考试 T2 人气投票(vote))。
- 算概率时如果钦定一个极值后所有的数概率相等,那么可以直接算出没有限制时的总概率再除以 \(n\)(2022.6.27 考试 T1 基础概率练习题(probability))。
- 一些奇奇怪怪的对边染色的题目要想想树剖后重标号(2022.6.27 考试 T2 基础树剖练习题(chain))。
- 形如 \((i-d)\) 之类的式子可以拆成 \(((i+y)-(y+d))\),其中 \(y\) 是你枚举的一个量;枚举时发现只关心和 / 差可以改成枚举和与差(「CF1542E2」Abnormal Permutation Pairs (hard version))。
- 对于一类可以不断扩展区间的问题,可以考虑每一次依次向左右扩展,更新所能到的左右端点,均摊下来是 \(O(n)\) 的(「JOISC 2017 Day 3」幽深府邸 & 「HNOI / AHOI2018」游戏 & 2022.6.28 考试 T1 局部坏死(haohuo))。
- 无序考虑转变成有序,结果再除以排列方案数;直接统计不好算考虑减去不合法的情况(「HNOI2011」卡农 & 2022.6.28 考试 T3 颜值平均眼镜(glasses)40pts)。
- 解决一些数能否拼凑成的最大 / 最小的数 \(\to\) 同余最短路(2022.6.29 考试 T1 摸黑深巢(deepnest))。
- 差分约束中消掉 \(|a_i-a_j|\le k\) 所带来的负权边 \(\to\) 看成 \(a_i-a_j\le k\) 和 \(a_j-a_i\le k\)(「AGC056C」01 Balanced)。
- 删边 \(\to\) 倒过来变成加边;\(i\) 到 \(j\) 只经过编号 \(\ge/\le k\) 的点 \(\to\) Floyd;贡献是一段区间可以考虑差分(「省选联考 2021 A/B 卷」图函数)。
- 考虑题目最终要求的是什么,有时候可以根据这个换一种思路;费用提前计算的思想(「省选联考 2021 A/B 卷」滚榜)。
- 只操作约数 \(\to\) 从大到小依次操作肯定最优,那么就可以根据这个进行 dp;同理如果只操作倍数,那么从小到大操作最优(「六省联考 2017」分手是祝愿)。
- 最大边权最小 / 最小边权最大 \(\to\) Kruskal 重构树;\(u\) 到 \(v\) 至少有两条不完全重合的路径 \(\to\) 路径上至少有一个点度数 \(>2\)(「APIO2020」交换城市)。
- 贡献和与 \(u\) 相连的所有点都有关时考虑换根 dp;考虑换根时要去除已经贡献过的一部分(「SHOI2014」概率充电器)。
- 当答案与参数大致成反比时,考虑根号分治;树形 dp 时把 dfs 序拉出来循环做卡常(「CF1039D」You Are Given a Tree)。
- 形如“离 \(i\) 最近的……”问题可以用单调栈;选 \(D\) 个叶子使链并最大,长剖后贪心(2022.7.1 考试 T1 卢瑞恩(lurien))。
- 遇到
01 序列的问题可以考虑赋权值给 01(2022.7.1 考试 T3 赫拉(herrah))。
- 贡献与什么有关就按照什么 dp(2022.7.2 考试 T1 脊椎(spine)/「ARC117E」Zero-Sum Ranges 2)。
- 一堆字符串的子串在文本串中的出现次数 \(\to\) AC 自动机 + fail 树;消除最少的字符串 \(\to\) 贪心(2022.7.2 考试 T2 翻译(identify))。
- 与边权有关的想到 Kruskal 就要想想 Kruskal 重构树(「CF1408G」Clusterization Counting)。
- 环的问题一般考虑转化成链;枚举的量与区间长度有关时选择最短的区间枚举,然后每扫到一个端点就把位置加上最短区间的长度(「洛谷 P4704」太极剑)。
- 一些东西与二进制有关时考虑按照每一位做;考虑题目中的信息到底有什么用(「HNOI2007」梦幻岛宝珠)。
- 全局修改或者修改次数较多啥的可以考虑打标记(「SDOI2019」快速查询)。
- 最大编号最小 \(\to\) 二分。多次询问 \(\to\) 整体二分(「AGC002D」Stamp Rally)。
- 有些计数问题可以想一想状态数是否有限(2022.7.5 考试 T1 Battle For Farbanti(giantstep))。
- 树上删边问题可以考虑把每个点与它的连边单独拿出来看成一张菊花图,在菊花图上确定相对顺序,然后拓扑排序(2022.7.5 考试 T2 Last Hope(gorgon)/「CF1667D」Edge Elimination)。
- dp 时考虑去掉无用状态(2022.7.5 考试 T3 Homeward(reflux)/「AGC119F」AtCoder Express 3)。
- 边双缩点后是一棵树,而且一个边双内的点可以通过定向使得两两能相互到达;给一些树上的边确定方向考虑树上差分(「CF555E」Case of Computer Network)。
- 图割掉若干个环后是一堆树;求答案试图将若干个连通块的答案合并起来(「CF512D」Fox And Travelling)。
- 动态维护 \(\bf{border}\) 集合 \(\to\) 失配树;答案太大要用
__int128;在处理删除不合法 \(\bf{border}\) 的时候的思想,也可以扩展到处理均摊删除的问题。(「CF1286E」Fedya the Potter Strikes Back)。
- 判断边 \(u\to v\) 是不是 \(u\) 到 \(v\) 的必经边可以对于 \(u\) 的出边正反跑两遍 dfs,记录到达每个点的路径的第一条边,如果不同说明不是必经边;\(u\to v\) 这条边变向当且仅当“存在 \(v\to u\) 的路径”和“存在另一条 \(u\to v\) 的路径”中满足恰好一个(「ARC092D」Two Faced Edges)。
- 点比边更好操作,所以可以把边权转化成点权;异或一条链可以把点权看成与它相连的边的边权异或和,那么操作等价于修改链的两个端点(「AT3913」「APC001」XOR Tree)。
- 从 \(u\) 开始经过权值 \(\le x\) 的边 \(\to\) Kruskal 重构树;第 \(k\) 大/小 \(\to\) 主席树(「ONTAK2010」Peaks 加强版)。
- 算 \(\oplus_j(s_i-s_j)\):按位做,枚举第 \(k\) 位,如果 \(s_i\) 与 \(s_j\) 第 \(k\) 位不同,那么只有当 \(s_i\) 的后 \(k-1\) 位 \(\ge s_j\) 的后 \(k-1\) 位时这一位才为 \(1\);否则就要求 \(s_i\) 的后 \(k-1\) 位 \(< s_j\) 的后 \(k-1\) 位(「TJOI2017」异或和)。
- 相邻两个数 \(i,i+1\) 同时异或 \(x\),相当于异或前缀和中 \(s_i\) 异或了 \(x\)(「yLOI2020」泸沽寻梦)。
- 构造题考虑递归构造 / 找到一种干某件事的操作 / 加强限制(2022.7.9 考试 T1 马格利特(Magritte))。
posted @
2022-06-24 20:30
csxsi
阅读(
7)
评论()
收藏
举报