跳转至

套路总结

区间覆盖

如果使用差分的方式完成,最后一个点后的值可能为 \(0\),要考虑这个值有没有可能不是任何一个区间的值。

树状数组

在维护一些不可减的东西的时候,有可能存在特殊性质使得维护的东西实际上是前缀或后缀,此时可以使用树状数组代替线段树,减少常数和代码复杂度。

修改和查询都反过来就可以维护后缀和。

矩阵快速幂

可以维护一堆数字符号拼接在一起组成的表达式。

多边形

判断一个点是否在多边形内部不要使用判四个方向能不能碰到边界,会被凹多边形制裁。

Min_25 筛

数位 dp

差分约束

floyd 也可以跑差分约束,spfa 跑出来的只是一组可行解,而 floyd 跑出来两点间的距离就是对应两个值的最大差值。另外,floyd 判负环可以直接遍历所有点看自己到自己的距离是否为负数。

二进制分组

二进制分组可以用 \(O(\log n)\) 个物品跑 01 背包覆盖 \([0,n]\) 的所有物品取值,但是对于 \([0,n]\) 的每个物品取值,方案并不是唯一的。

AC自动机

设字符串总长为 \(n\),则 fail 树的高度不超过 \(O(\sqrt n)\)

行列式函数求导

\[ \begin{aligned} \frac{\text d}{\text dx}|\boldsymbol{A}(x)|&=|\boldsymbol{A}(x)| \text{Tr}\left(\boldsymbol{A}^{-1}\frac{\text d \boldsymbol{A}(x)}{\text d x}\right) \newline &=|\boldsymbol{A}(x)| \sum_i \sum_j {\left(\boldsymbol{A}^{-1}(x)\right)}_{ij}{\left(\frac{\text d \boldsymbol{A}(x)}{\text d x}\right)}_{ji} \end{aligned} \]

这里矩阵函数对单个变量的求导 \(\dfrac{\text d \boldsymbol{A}(x)}{\text d x}\),即为矩阵中每个位置分别对 \(x\) 求导。

具体证明:行列式求导法则

二分图最大权匹配

KM 算法:给每个顶点分配一个顶标,使得对于任意一条边,两侧点的顶标之和不小于该边的权值。

使用费用流求最大权匹配的时候左侧的点也要和汇点连边,因为最大权匹配不一定是最大匹配,但是我们跑的是最大费用最大流,所以一定要让没匹配上的点也流向汇点。

回到页面顶部