省选前的总结

考场策略:

  1. 心态要自信,不要焦虑。
  2. 做不出题的时候先放松,去上厕所,洗脸。
  3. 不要放弃,广开思路,尽量多试一些学过的算法,往每个方向都深入思考,因为每个方向都有可能是正解。
  4. 考场上不要写代码也不要切题。要合理分配时间,掌控考试过程,切忌贪心写题。

算法与数据结构:

树:(动态)点分治,DFS序,树链剖分,长链剖分,动态树,dsu on tree,树形DP,lca,虚树,树上差分,树上高斯消元,kruskal重构树,动态DP,ETT,prufer序列。

点分治:有两种统计方式,一种是逐个子树统计,还有一种是全部搞到一起然后一起统计,想办法去重。

动态点分治:每层的重心之间连边,树高log。维护点分子树到该点的信息,可套线段树。一般要消去每个点分子树内部的影响。不可减信息用DFS序来消去,对每一层的点分子树维护在原树上的DFS序。常用O(1)lca。

树链剖分:可优化连边,可预处理做到一个log。

长链剖分:O(1)k级祖先,O(n)处理树上与深度有关的信息,可与猫树结合做到O(1)回答询问。

动态树:可维护子树信息,树上染色,边双连通分量,某种生成树。可与ETT/sam配合。

dsu on tree:树上启发式合并。可以拿来打暴力。

树形DP:可用一维状态表示在子树外xxxx。可用长链剖分优化。转移的时候可新开一个数组复制过去,别忘了给原数组赋0。逐子树合并。可二次扫描与换根法。

lca:O(1),可用来处理一些树上可减信息。

虚树:可套整体二分 + 线段树合并。按照DFS序排序。

树上差分:进子树和出子树的时候分别统计一次。也可用到根路径和lca来差分,常与主席树结合。

树上高斯消元:每个点的信息可以只被父亲表示。设出系数然后化式子。

kruskal重构树:树上倍增。可以建两棵,用DFS序转到二维平面。

动态DP:树剖维护线段信息。

ETT:有根树splay维护括号序列。

prufer序列:每个点的度数为出现次数 + 1。可用于计数。

数据结构:(可持久化)线段树(合并/分裂)(猫树/吉司机线段树),树状数组,左偏树,splay,非旋treap,STL,并查集,单调栈,树套树,ST表,链表。

线段树:势能分析,每个数被操作次数不会超过一个上限(一般是log次),否则暴力重构。可持久化就是沿用之前的节点,标记永久化。

线段树合并:分为可持久化和不可持久化两种,常与sam/树上问题嵌套。

线段树分裂:类似非旋treap的写法。把前k大和后k大分开。

猫树:每个区间预处理出左边,右边到中点的答案。查询时直接O(1)找到对应节点(O(1)lca或二进制)然后O(1)查询。

吉司机线段树:区间对某个数取max。维护最小值,最小值个数和严格次小值。

树状数组:可以一个log找第k大,维护前缀最值。值域小的时候甚至能切普通平衡树。常与CDQ分治/整体二分嵌套。二维树状数组就是树套树。

左偏树:可并堆,能够完爆普通手写堆。记得跟线段树一样维护一个rt[],每次修改rt。可以额外用一个并查集来维护根的编号。

splay:能够维护序列/数值集合。

非旋treap:可以可持久化。

STL:set,multiset,map,priority_queue,vector,bitset。

并查集:可撤销,可带扩展域/带边权。

单调栈:用于各种神奇的发掘性质题,lis,DP优化当中。

树套树:用来处理二维信息。有时可用整体二分代替。

ST表:可优化连边,可O(1)求区间最值,可用于O(1)lca。

链表:可维护一些O(1)插入删除(必须按顺序)的信息,有时会在莫队中使用。

图论:网络流,tarjan,最短路,差分约束。

网络流:主要是建图,要加当前弧优化。

tarjan:求解连通性信息,多作为一道题目的一部分。

差分约束:最大值求最短路,最小值求最长路。

字符串:hash,后缀自动机,AC自动机,manacher,KMP,回文自动机,trie。

hash:双模数,可平衡树维护hash值。

后缀自动机:一般与线段树合并结合,有时与lct结合,很多时候用fail树转成树上问题。可用后缀树构建sa。

AC自动机:每个点都是一个前缀,跳fail是跳后缀。可与DP,矩阵快速幂结合。

manacher:O(1)求解以每个位置为中心的回文串。

KMP:可改变第二次匹配时的匹配条件来做到一些奇怪的匹配。

回文自动机:求解所有本质不同回文串,每个字符结尾的回文串信息。

trie:可用01trie来处理异或,可持久化01trie来代替可持久化平衡树。可建trie sam。

多项式:FFT,多项式操作,FWT。

FFT:可处理字符串匹配,卷积求方案,可与点分治结合。可用原根把*变成+做FFT。

多项式操作:多出现于计数题中。常用倍增与牛顿迭代。

FWT:位运算卷积。求子集和(高维前缀和)然后再差分回去。可优化子集DP(FST)

计算几何:叉积,凸包,辛普森积分。

叉积:x1y2 - x2y1是有向面积。

凸包:左右横着扫两次。可用于斜率优化,可用set维护。

辛普森积分:分多段积分。精度要求是15eps,公式是(f[l]+4f[mid]+f[r])(r-l)/6。

DP:状压DP,区间DP,插头DP,斯坦纳树,斜率优化,决策单调性优化,数位DP。

可按照大小依次DP。可把期望概率转为计数问题。可改变DP状态与值的对应关系:f(x) = a ->  f(a) = x。

状压DP:常用于打暴力,可分为二进制/多进制状压,可预处理状态集合。可压轮廓线/点集,可DFS转移一行/一格一格转移。

区间DP:可多加一维状态表示把当前变成什么样。

插头DP:状压轮廓线上的左右插头。

斯坦纳树:状压连通的关键点集,子集转移之后spfa转移。

斜率优化:发现DP的转移代价有个乘积,维护凸包。可与CDQ分治结合。

决策单调性:分治写法是[l, r]区间的最优决策全部来自于[L, R]。维护决策栈写法是维护每一段决策分别是啥,以及段的结尾。

数位DP:预处理随便选的方案数(记忆化搜索),然后枚举在哪一位开始不严格相等。

计数:容斥原理,生成函数,组合数学,Min-Max容斥,二项式反演。

容斥原理:从恰好转为至少/至多。然后按照集合大小的奇偶性分配系数。有时候要减去算重的。可保证一路递推来的全是合法的,然后减去。

生成函数:考虑待解决的问题自己跟自己的关系。连通->不连通是EGF exp。

组合数学:组合数,卡特兰数,斯特林数等。

Min-Max容斥:求最值就是求所有子集的另一个最值的和,配上正负1系数。集合大小为1时系数为1。对期望概率同样有效。

二项式反演:若F(x) = ∑f(i),那么f(x) = ∑C(x, i)F(i)。

数学:线性筛,杜教筛,BSGS,lucas,(ex)CRT,莫比乌斯反演,二次剩余,矩阵乘法,高斯消元。

可O(logV)质因数分解(预处理)。

线性筛:O(n)筛积性函数。记录每个数的最小质因子和个数。

杜教筛:找个好求和的g跟f卷出来h,也好求和。一般是为了把f的奇怪的项消掉来配g。

BSGS:预处理√phi(p)以内的放入hash表,然后每次跳√phi(p)步。

lucas:lucas(n, m) = lucas(n / p, m / p) * C(n % p, m % p)

CRT:考虑对其他的模数无影响,每个a乘上逆元即可。ex就是用扩欧解方程然后合并方程。三模数NTT的时候先对第三个模数取模然后对最终模数取模。

莫比乌斯反演:若F(x) = ∑f(d),则f(x) = ∑miu(d / x)F(d),常把gcd提前枚举。

二次剩余:w = a2 - n,sgn(x) = x(p - 1)/2。随机a使sgn(w) = p-1,自定义单位负根为√w,然后求解(a + w)(p + 1)/2

其他:CDQ分治,整体二分,分块,启发式合并/分治,线段树分治,(树上)(带修)(回滚)莫队,二(三)分,带权二分,扫描线,01分数规划,倍增,时光倒流,随机化,搜索,模拟,贪心,博弈论,模拟费用流。

CDQ分治:先DP完左边然后更新右边。可优化DP,树上与点分治结合。可嵌套。

整体二分:通常求解第k大,有个特殊的应用是求解一条边在scc中的时间。内部可嵌套各种东西,比如虚树,树套树。

分块:可维护序列,或者对出现次数,数值的大小,时间分块等。时间分块定期重建可以优化成二进制分组。

启发式合并:每次暴力遍历小的集合。

启发式分治:包括最值分治。每次花费的时间为小的集合那一部分的时间。可以巧妙的改变枚举顺序。

线段树分治:把加,删操作变成只有加的操作。内部还是嵌套各种可撤销数据结构。

莫队:对询问分块。树上:括号序列。每个点重复计算时减去贡献,分类讨论。带修:第三个指针在时间上跳动。回滚:使用可撤销数据结构做到只有删除/插入。

二分:直接暴力二分答案,然后check。非常常用!非常常用!

带权二分:要使D的变化和你的值的变化相同,然后尽量取k小的那个。感性证明(打表)凸函数。

扫描线:把二维限制转换为二维平面上的信息,然后扫描线。

01分数规划:二分答案然后check。

倍增:常在树上使用。应用广泛。

时光倒流:倒着处理会好受一些。

随机化:随机化check是否合法/随机化排列以达到期望复杂度/随机化贪心。

搜索:优先搜分支少的/最优的。

模拟:注意各种细节。

贪心:可通过微调来证明。

博弈论:sg函数。多找规律。

模拟费用流:先贪心,用堆来模拟反悔操作。

posted @ 2019-04-03 22:03  huyufeifei  阅读(...)  评论(...编辑  收藏