Loading

通用技巧

通用技巧

一、向后贡献,向前扩展——逆向扩展法

对于一个序列 \(a_{1\sim k}\),假设我们要求他的所有前缀和之和,有表达式:\(\sum_{i=1}^na_i(k-i+1)\) ,我们发现当加入一个数 \(a_{k+1}\) 的时候,表达式增加了 \(\sum_{i=1}^{k+1}a_i\),这个式子与 \(a_{1\sim k+1}\) 都有关,是不好的。

如果我们令 \(a_{i}\) 表示从后到前第 \(i\) 个元素,那么表达式变成了 \(\sum_{i=1}^ka_ii\),这样当我们新加一个数 \(a_{k+1}\)后,表达式增加了 \(a_{k+1}\times(k+1)\),这是好的。

像这种贡献影响方向与动态添加扩展方向相反以达到快速维护的方法就是“逆向扩展法”

例题:P2053 [SCOI2007] 修车

二、区间离散化

\(10^5\) 个区间覆盖了长为 \(10^9\) 的序列,许多位置的区间覆盖情况是相同的,这时需要区间离散化。

把每个覆盖区间设做左闭右开 \([L,R)\)(注意这里必须是左闭右开),将 \(L,R\) 放入离散化数组后排序,相邻的两个值构成的左闭右开区间就是一个覆盖情况是相同的区间,之后可以作为一个元素整体处理。

例题:P4229 某位歌姬的故事

三、必要条件Hash法

给每个数随机赋一个权值后,去看是否满足其必要条件而非其本身,多次Hash后,错误概率很低。

四、二维子矩阵问题转一维子段问题

可以直接枚举一边的左右端点。例题:2024.10.15T4 矩阵

在子矩阵的长宽固定时,可以两边分别进行一次一维的。例题:CF1195E OpenStreetMap

五、树上链问题转二维数点问题

使用场景:一个(组)元素对包含他的链造成影响。静态问题

使用方法:

首先求出每个点的 DFS 序,那么每个点的子树内所有点的 DFS 序连续,记 \(L_u,R_u\)\(u\) 子树内 DFS 序的最小值与最大值。考虑画出 \(n\times n\) 的二维平面,每个点 \((i,j)\) 表示一条路径 \(i\to j\)

如果要求对同时包含了点对 \((u,v)\) 的链进行某种操作,假设是权值加 \(1\),分类讨论:

  • \(u,v\) 之间无直系亲属关系,相当于对于链头分别在 \(u,v\) 的子树里的链加 \(1\),相当于对矩形 \(((L_u,L_v),(R_u,R_v))\) 与矩形 \(((L_v,L_u),(R_v,R_u))\) 里的点加 \(1\)。可以证明这两个矩阵不交。

  • \(u,v\) 有直系亲属关系,假设 \(u\)\(v\) 的祖先,找到 \(u\) 的儿子 \(w\) 满足 \(w\)\(v\) 的祖先,那相当于对矩形 \(((1,L_v),(L_w-1,R_v))\) ,矩形 \(((R_w+1,L_v),(n,R_v))\),矩形 \(((L_v,1),(R_v,L_w-1))\),矩形 \(((L_v,R_w+1),(R_v,n))\) 单点加 \(1\)。可以证明这些矩形不交。

因为二位数点问题的动态矩阵修改很难写,所以一般是在静态问题中用扫描线做。

2024.11.21 T3焰硝庭火舞告诉我们树上的点对可以看作链。

例题:2024.11.21 T3焰硝庭火舞,P3242 [HNOI2015] 接水果

六、颜色问题

由于颜色不能进行普通运算,所以处理方式也有所不同。

一、分开独立处理

P3313 [SDOI2014] 旅行

对每种颜色单独开数据结构

T463392 2023模拟试题_冯政玮_square

对每种颜色单独进行DP

因为颜色的运算只有\(=\)\(\ne\),对于许多颜色的DP难以处理,这里对于每种颜色都分别求出以一个位置为左上角,最小的可以覆盖这个颜色的矩阵的边长,这是容易转移的。接着就可以反算出边长为\(x\)的矩形可以覆盖多少颜色。

二、莫队/分块暴力处理

一般以次数、种类数著称

P4074 [WC2013] 糖果公园:糖果种类可看作颜色

七、定义域值域转换

原来这个技巧不一定用在区间DP中。

要求 \([l,r]\) 的答案,但是直接求因为\(l,r\)范围太大导致复杂度太高

当已知答案很小的时候,设 \((l,i)\) 表示 \([l,r]\) 的答案为 \(i\) 的最小的 \(r\),这要求答案具有区间包含单调性。P8330 [ZJOI2022] 众数

八、割边容斥

假设我们可以对于一条边,算出答案在其连接的两个连通块其中一边的方案数,那么点 \(x\) 为答案的方案数 \(= ans_{\color{red}\Delta}-ans_{\color{blue}\Delta}\)U526253 在星河里

posted @ 2024-12-28 16:56  lupengheyyds  阅读(15)  评论(0)    收藏  举报