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\) 的连边(即,这是一张叶向图)

  • 删边最短路

    Alex_wei 就是神

魔法

source:联考

首先考虑一个定字符串怎么做。

也就是一道典题:求一个字符串的本质不同字符串个数

这个东西的递推式是

\[f_i=\begin{cases}2\times f_{i-1}+1\quad a_i没有出现过\\2\times f_{i-1}-f_{a_i的上一个出现位置-1}\quad a_i出现过\end{cases} \]

维护一下值域内每个数出现的上一个位置,这个东西是 \(\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\),然后计算贡献即可。

posted @ 2024-02-29 15:00  wtcqwq  阅读(16)  评论(0)    收藏  举报