自信人生二百年 会当击水三千里.|

lsj2009

园龄:2年7个月粉丝:22关注:5

经典 trick 选记

图论

  1. 有关于树/DAG 的构造等,可以考虑从叶子/入度为零的节点开始删点。
  2. 有关于 Floyd 的题目,观察是否满足矩阵乘法结合律,从而使用矩阵快速幂加速。
  3. lca({un})=lca(idmindfn,idmaxdfn),其中 iddfnu=u。类似 trick 的题目:CF1062E。
  4. 考虑 dijkstra 每个点只会经过一次,通过其距离单调递增的性质,来给一张图定向成一张 DAG。
  5. 当题目给定一个网格时,且有对于一整行、一整列的操作时,考虑把第 i 行向第 j 列连一条边权 ai,j 的边(特殊地,ai,j=i+j),构造出一二分图。类似 trick 的题目:ARC083F。
  6. 看到有关于“次数”限制时,考虑拆点,跑网络流。
  7. 考虑让一些特殊节点成为树的根,比如重心。
  8. 对于一棵树上有不同类型的点(比如黑/白点),考虑虚树。
  9. 对于一些具有可减性的信息,考虑建图作为边权。
  10. 除节点编号外还出现了“时间”一类的信息考虑分层图。
  11. 树形 dp 遇到要保存某个子孙信息时,不妨逆向考虑保存祖先信息,即 fu,son 转换成 fu,fa
  12. 考虑把一棵树拆成一条链上面挂了好几棵子树,或者一张图拆成一条链上面挂了好几个环。
  13. 遇到奇偶、男女、01、黑白之类的信息,考虑二分图/并查集/网络流。
  14. 无向图的 dfs 树不存在横叉边。
  15. 求完全图最小生成树,且边权有一定规律时,考虑 Boruvka 算法。类似 trick 的题目:CF888G。
  16. path(s,t)=path(s,u)+edge(u,v)+path(v,t)=path(s,u)+edge(u,v)+path1(t,v)。类似 trick 的题目:P5304。
  17. 当一个图既有点权又有边权时,考虑把点权拆到边上,或者把边权拆到点上。
  18. 判断树上两点是否为祖先关系时,考虑从 dfn 序入手。类似 trick 的题目:P5901。
  19. 遇到有关于“匹配”的问题,除了网络流外,还可以建基环树森林,对应每条边与每个点一一对应。类似 trick 的题目:ARC083F。
  20. 差分约束只有非负/非正权边时,考虑 tarjan 缩点,判断每个强连通放了内是否有正/负权边,然后 toposort。类似 trick 的题目:P3275。
  21. 遇到有一些边至少/恰好走一次考虑欧拉路。类似 trick 的题目:P6628。
  22. 对于树上任意 3 个点 (u,v,w) 满足 disu,w+disw,vdisu,v
  23. 对于复杂度和节点度数相关,考虑根号分治/三元环计数的 trick。类似 trick 的题目:P3547。
  24. 如果对于某个节点 u 需要计算他与每一个节点 v 相关值的(最值/和)信息,考虑先将一条链 (u,v) 劈成 (u,lca(u,v))(lca(u,v),v),对后者先自下而上汇总,再对于前者自上而下传。类似 trick 的题目:AtCoder Code Festival 2017 Final J。
  25. 如果 lca(u,v)=x,则 u,v 必然有一个节点在 x 的轻子树中。
  26. n 个点的竞赛图三元环数量为:(n3)(degi2)
  27. 对于一个无向图,设 fu 为距离点 u 最远的点的距离,则该图的直径为 s=max1unfu,有结论为 s2fus。类似 trick 的题目:CF1804F。
  28. 一个无向图的所有环的公共节点只有至多两个。
  29. 当每个点最多只有两条出边时,考虑三角剖分图。
  30. 一个二分图的所有的最大匹配方案中必然有一个公共点,即删去这个点后最大匹配数减一。
  31. 竞赛图缩点后是一条链。
  32. 如果我们知道竞赛图每个点的入度 or 出度,则可以确定整张竞赛图的相对顺序。

ds

  1. 有关于维护下标大小信息的合并,可以借助线段树上本身的左儿子下标小于右儿子下标简单处理。
  2. 维护一个三元组 (a,b,c) 的信息,看看是否能拆成 (a,b)+c 的形式更易维护。
  3. 树剖的边转点:钦定边 (u,v) 的编号为 max(dfnu,dfnv),进行修改/查询链 (u,v) 时等价于查询 {path(u,v)}{lca(u,v)}
  4. 从作用层面上来讲,主席树 = 不带修树套树。当一道题树套树意义下做法显然时,考虑将其变为主席树。
  5. 对于维护 i[l,r],v[x,inf] 一类的查询时,对第二位排序,维护第一维即可。
  6. 一些修改较为复杂时,不妨采用矩阵维护。类似 tirck 的题目:LOJ2980。
  7. 对于树上,链加单点求和 = 单点加,子树求和;单点加链求和 = 子树加,单点求和。可以把暴力树剖的 log2 优化到 log
  8. 遇到“出现次数”,考虑根号分治。
  9. 数颜色数往往采用记录 pre 然后数点的方法。
  10. 当遇到删除操作时,考虑线段树分治。
  11. 有关于最值/比较大小的问题(包括但不限于 ds 和 dp 问题),考虑丢到笛卡尔树上去考虑。
  12. 对于查询第 k 小的问题,如果存在简单的 Θ(kpolylog(n)) 做法,但 k 很大时,考虑随机二分。类似 trick 的题目:P5984。
  13. 对于树上,如果要快速统计某个点所有儿子的信息,考虑开一个数据结构保存其所有轻儿子信息,则在树剖时,由于不会经过超过 Θ(logn) 跳重链,所以修改轻儿子的复杂度可以接受;对于重儿子,再开一个数据结构维护所有点的信息,在查询时把他和轻儿子丢到一个数据结构里计算即可。类似 trick 的题目:CF1172E,P5314。
  14. 当一些东西和为定值时,考虑对其进行根号分治。
  15. 在有向树上通过 toposort 做线段树合并复杂度是对的。例子:P8959。

dp

  1. 如果遇到询问形如:规定某个物品不能用之类的,可以考虑前后缀分别 dp,然后询问时在中间再做一次 dp(其实与杂项中的第 3 条类似)。
  2. 数位 dp 时可以考虑在数位上做区间 dp(普通数位 dp 本质上是在数位上做线性 dp)。类似 trick 的题目:P9129。
  3. 遇到“强制选”时,同样考虑前后缀 dp。类似 trick 的题目:P1973。
  4. 对于 dp 题,思考:哪些状态是有用的。
  5. 当优化 dp 状态却无从下手时,考虑 dp 方程的单调性。
  6. 当 dp 转移方程和因数/倍数关系有关时,考虑将其写成迪利克雷卷积的形式,观察其积性/进行反演。

杂项

  1. 如果某道题直接 dp/贪心比较困难,考虑是否可以进行反悔贪心。
  2. 遇到比较两集合、两序列的情况时,考虑哈希;如果需要动态维护哈希值,那么需要构造出一种优秀的哈希函数。类似 trick 的题目:P5278。
  3. 对于类似于“删除”一类等操作直接做较为困难时(如模非素数意义下的除法、线性基相减)等,考虑维护前/后缀的值。类似 trick 的题目:CF543D。
  4. 看到一个变换 xxy,考虑是否能拓展到 xxmody
  5. 根号分治是一种很重要的复杂度分析方法。
  6. A296010,看到 n=50 考虑复杂度是否与拆分数相关。
  7. 考虑转换:存在一个满足 not 所有都不满足。
  8. |ab|=max{ba,ab}
  9. popcount(xy)popcount(x)+popcount(y)(mod2)
  10. 字符串题考虑:翻转、拼接、插入。
  11. 当模数不为素数时,考虑质因数分解然后最终用 crt 合并答案。类似 trick 的题目:P2480。
  12. 遇到 ,考虑转换成 和乘方处理。类似 trick 的题目:CF1106F。
  13. 对于任意正整数 xyb,必然存在一个正整数 k 使得 xyb 进制数在第 k 位不同。类似 trick 的题目:P5304。
  14. 对于形如“选择若干个数满足什么条件,且使得选择方案字典序最小”的一类问题,考虑从小到大枚举数,判断是否可以加入。
  15. 遇到 amodb,考虑将其分为 ab 个周期性问题。
  16. 对于杂项 8 的拓展:i=1n|aibi|=maxS{1,2,,n}{i=1n(1)[iS](aibi)}。类似 trick 的题目:CF1093G。
  17. 对于“在一个集合里随意交换”,往往将其抽象成一个置换环。类似 tirck 的题目:P8189。
  18. 对于线段上点的运动往往转换成在二维平面上折线的轨迹。类似 trick 的题目:P9018。
  19. 对于“给定一些数量关系判断是否发生矛盾/求值”一类的题目,考虑将一类关系看出修改,一类关系看出询问。
  20. 对于求一个 01 序列的最长不下降子序列:将 0 置为 11 置为 1,则等价于求新序列的最大前缀和。
  21. 最大子段和性质:不存在一个前缀或一个后缀为负;不存在一个紧贴在其之前或紧贴在其之后的字段为正。类似 trick 的题目:P5369。
  22. 当恰好 k 个不好算时,考虑转换成钦定 k 个,然后容斥;特殊地,例如求 gcd=k 的个数,不妨转换成 gcdk 的倍数
  23. logab=loga+logb。类似 trick 的题目:P4926。
  24. [l,r]=[1,r][1,l1]。类似 trick 的题目:P9753。
  25. aamodkp(modp)。类似 trick 的题目:CF55D,CF1359E。
  26. 看到平均数 =x,考虑将所有数都减掉 x,那么就变成了和 =0 的问题。类似 trick 的题目:ARC104C。
  27. 考虑几何意义。
  28. max{a,b}=a+b+|ab|2,一个经典应用是 |ab|=2max{a,b}ab,则 i=1n|aibi|=2i=1max{ai,bi}i=1nai+bi
  29. x 是偶数时,x(x+1)=1。类似 trick 的题目:CF1493E。
  30. 异或最大/最小:考虑 01-Trie/线性基。
  31. 对于排序、比较大小、交换一类的问题,往往考虑从 01 序列入手,即钦定一个 x,记 x 的数为 1<x 的数为 0
  32. 对于期望 E=i=1npii,考虑记 si=j=inpj,有 E=i=1nsi。类似 trick 得题目:CF1523E。
  33. 对于令“所有数相等”一类的询问,考虑对依据题目给定的变换连边,则问题变成了求那几个数在树上的 lca。类似 trick 的题目:CF1797E。
  34. (nm)1(mod2)m and n=m
  35. 对于 minmax(a,b)maxmin(a,b) 的形式,当随 a 增大时 b 不增大,找出 a,b 的表达式,a=b 时即为答案。
  36. abc=a1b+1c=a1b+11c+1=a1bc+1
  37. 对于一些比较奇怪的贡献(比如说 xkanswer)考虑其组合意义。
  38. 把一个 x 拍扁成 fx=111x times000,则我们有 |xy|=popcount(fxandfy)

本文作者:lsj2009

本文链接:https://www.cnblogs.com/lsj2009/p/17668670.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lsj2009  阅读(1741)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起