2024.1.16 题选
2024.1.16 题选
Indecisive Taxi Fee
Source: CF1163F
题意:给定一张无向有权图,和 \(q\) 次问询:更改一条边的权值(不影响后续问询)以后,\(1\to n\) 的最短路。
Sol: \(1\) 到 \(n\) 的最短路一定可以理解为 \(\min(经过一条边 t 的最短路,不经过一条边 t 的最短路)\) 。后者是删点最短路,前者是 \(\min dis(1\to t_u)+t_w+dis(t_v \to n),dis(1\to t_v)+t_w+dis(t_u\to n)\) 这个东西可以轻易 \(O(1)\) 求。
删点最短路做法:
-
最短路树
原图无负环
对于每个点 \(u\) 最后一次被更新时的前驱(记为 \(f_u\)),则在最短路树中有一条 \(f_u\to u\) 的连边(即,这是一张叶向图)
-
删边最短路
魔法
source:联考
首先考虑一个定字符串怎么做。
也就是一道典题:求一个字符串的本质不同字符串个数
这个东西的递推式是
维护一下值域内每个数出现的上一个位置,这个东西是 \(\mathcal O(n)\) 的。
然后增加一点难度,加上 \(c_i\) 这个条件。
观察连续的一段相同的 \(a_i\),一定有 \(f_i=2\times f_{i-1}-f_{i-2}\) 这个东西可以矩阵加速,也可以观察出在每一段相同的颜色段内,\(f_i\) 是等差数列,反正怎么做都很容易:\(\mathcal O(n)\)
考虑加上期望的约束。
回响
source:联考
题意:将字符串 \(S,T\) 分别拆分为 \(k\) 段,求是否存在方案使得 \(\forall 1 \le i \le k\quad S_i=T_{k-i+1}\)
参考 CF932G【先当个模板吧,还没学会 回文树】。你会发现这两个问题之间可以互相转换。
只需要将两个串插在一起就可以了,也就是 \(S_1,T_n,S_2,T_{n-1},\cdots\)。
然后做 CF932G 即可。
上升
source:联考
题意:做 \(l=0,r=k-1\) 。对格子编号,\((i,j)\) 的权值为 \(ki+j\),然后对黑色格子的权值排序后求选出尽量多的 $0,1,\cdots $ 这样的不交子序列
然后这玩意一眼最大流。问题相当于 删除最少的点使得形如没有这样的 不交子序列。
考虑子序列匹配的贪心算法。设 \(dp_{i,j}\) 表示考虑到 \(i\) 点,最长匹配等于 \(j\) 最少删的点数,转移用 \((min,+)\) 矩阵加速。线段树维护,\(O(qk^3\log n)\)。卡一卡可以拿满了,所以后面那一半先摆了。
Kuroni and Antihype
Source: CF1305G
有一张 \(n\) 个点的有(点)权图。两点 \((i,j)\) 有边当且仅当 \(a_i \text{bitand} a_j=0\)。求一棵生成有向森林,所有边都指向叶子节点,边权为边的起点的点权。最大化有向森林边权和。
考虑增加一个点权为 \(0\) 的点,这是点权化边权的一般步骤。然后可以采用 Kruskal 算法。只需要枚举边权和 \(x\)。因而你枚举 \(x\) 的子集 \(i\),然后计算贡献即可。

浙公网安备 33010602011771号