Tricks
前面写的确实废 /kk
1.图论路径最值/删边:离线加边并查集
2.图论两种限制的题目(不是2-sat):
一般的套路就是条件按照第一种权值为关键字排序,询问按照第二种关键字排序
然后给条件分块,然后对于一个块只把第一关键字符合条件的询问放进去
在把当前块前面的点按照第二关键字排序
这样当前块前面的点都是符合当前询问点对于第一关建字条件的
而且第二关键字都是单调的,所以就可以双指针扫一下
然后对于每个询问,暴力处理一下当前块的贡献
[HNOI2016]最小公倍数
3.仙人掌问题
先看作树上问题,得出大致思路(树形DP),再将仙人掌整成圆方树,结合之前的思路,修改讨论细节
4.无向联通图生成树个数为
具体证明有 prufer 序唯一性可证得
5.当树上一节点答案由任意两个儿子贡献时,可以利用前缀和 解决(树背包,树形DP)
6.枚举 (二进制)的子集:
for (re int t = s; t; t = (t - 1) & s)
时间复杂度为
可以利用高维前缀和优化,比如求
for (re int j = 0; j < n; ++j)
for (re int i = 0, up = 1 << n; i < up; ++i)
if (i >> j & 1) f[i] += f[i ^ (1 << j)];
时间复杂度
7.建圆方树时, 要算反父亲的返祖边;而仙人掌的圆方树则不算,但仙人掌可能圆点间连边,所以在 时,对于 low[v] > dfn[u]
的要 Add(u, v)
8. 个数中选不相邻的 个,使得和最小,考虑反悔贪心,即每次取优先队列最小的,删除左右两个数,同时向其中插入左 + 右 - 自己,找左右用双向链表维护
9.给序列 ,每次给 ,询问 ,可先预处理出前缀和 、二阶前缀和 ,
若带修改套树状数组,时间复杂度多一个
10.带点权有向图,边 表示 依赖于 ,合法地选择一些点,使点权和最大(求最大权闭合图)
网络流: 连向正权点,容量为点权,负权点连 ,容量为点权绝对值,依赖边不变,容量为 ,答案为
11.循环矩阵乘法时间复杂度为
将矩阵看作一维数组,仅保留第一行,那么:
12.稀疏方程组的高斯消元,如 CF24D Broken robot
只需手动模拟,复杂度降维
13.区间
一维不带修改直接线段树
一维带修改:将 的 转化为 差分数组 的 再与 取 ,修改变为单点
二维:树套数/四分树
14.区间加减将序列变为 ,转化为单点加减将差分序列变为
15.树上一堆点的 即为 最大和最小的两个点的
16.一个 个点的有根叶向树,有 种拓扑序
17.比较若干大数乘积的大小,可以将每个大数取对数,将乘积转化为求和([IOI2015] 马)
18.平面图最小割等于其对偶图最短路
19.换根 DP 通解:
1. 记录
2. 让 去除 的贡献
3. 将 当作 的一个儿子,更新
4. dfs(v, u)
5. 回溯
20.
21.图论结论:
1. 二分图最小点覆盖 = 最大匹配
· 最小点覆盖方案:
1. 从右部每个没有匹配的点开始dfs
2. 右部向左部走的时候走非匹配边
3. 左部向右部走时走匹配边
4. 然后标记经过的点
5. 一种方案就是左部标记过的点+右部未标记的点
1. 二分图最大独立集 = 总点数-最小点覆盖
2. DAG 最小路径点覆盖 = 总点数-拆点后最大匹配
3. DAG 最小链覆盖 = 总点数-拆点后传递闭包建出的二分图的最大匹配 = 最长反链长度(Dilworth 定理)
4. DAG 最小反链覆盖 = 最长链长度
22.维护 个集合,然后一次给一段区间的集合全部加入/删除若干个数
1).离线 + 差分 + 扫描
「ZJOI2016」大森林 、 「JOISC 2021 Day1」饮食区
对 的集合操作,就拆成在 加入操作,在 去除操作
2).线段树 + 标记永久化
「C.E.L.U-02」苦涩
直接用线段树维护 个集合,区间插入就在 个线段树节点上插入,当作打标记,且不下传,以保证时间复杂度
3).ODT
旭日东升
对每种要插入的数整一个 ODT,那么每个区间只会被插入一次,至多删除一次,所以复杂度是优秀且稳定的!
23.序列 排序后若为等差数列,那么其公差 为
24.“一个无向图选一个边集使得所有点的度数为奇数”有解的充要条件是——该无向图不存在点数为奇数的连通块
25.树上到所有节点距离和最小的点是重心
26.森林的联通块数 = 点数 - 边数
27.若 ,则
28.一个 trick:(虽然你完全可以用整除分块做)
29. 是卡特兰数的第 项,那么:
30.
31.另类最短路 Dijkstra 的正确性未知?不妨考虑建分层图!
32.学会用 hash,出自 「CSP-S 2022」 星战
33.做高维前缀和/差分时尽量不要调用 以外的部分,比如当要 i -> i | (1 << j)
时,改为 i ^ (1 << j) -> i
;当要 i | (1 << j) -> i
时,改为 i -> i ^ (1 << j)
34.直径相关问题,考虑中心
35.求 一次多项式的卷积,考虑分治 NTT,每次卷最小的两个,复杂度是 的
36.计算 的方案数,或许可以用总方案数减去 的方案数再除以 2(前提是 的方案数等于 的方案数)
37.一个 的排列的期望逆序对数为
38.记 ,则
可以莫队
40.普通幂转下降幂
41.奇妙转化,来自 ABC277 Ex:
证明:如果 ,那么 ,那么
这样就可以拆成 ,然后 2-SAT
42.看见中位数就要二分答案
本文作者:After-glow
本文链接:https://www.cnblogs.com/Aftglw/p/15759658.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步