CF919D Substring 题解
传送门: ⊗ \otimes ⊗ ⊕ \oplus ⊕
题目大意
给定一个 n n n 点 m m m 边的有向图,每个顶点代表一个小写字母。定义一条路径的权值为出现最多次数的字母的出现次数。例如一条路径上的字母分别是 abaca,那么这条路径的权值就是 3 3 3。你的任务是找到这张图上最大的路径权值。(有环则输出 -1.)
样例输入
5 4
abaca
1 2
1 3
3 4
4 5
样例输出
3
解析
首先考虑 dfs/dp,在合并信息的过程中发现“最多出现的字母”是不可加的,也就是说不能只记录最多出现的字母。于是便想到了用 f i , j f_{i,j} fi,j 记录以 i i i 为结尾的路径中,字母 j j j 最多出现的次数。在这里,我们需要将小写字母量化,常用方法是 str[i] = s[i - 1] - 'a',即 ASCII 码相减。
再看题目中,有向图+环+路径,自然让人联想到了拓扑排序,核心思想是用一个节点的所有前驱更新这个节点的信息。将拓扑排序作为转移顺序,也就是拓扑排序的同时完成转移。对于一条边 ( u , v ) (u,v) (u,v),先将 u u u 的信息合并到 v v v 上,再考虑这条边产生的贡献。即对于 ∀ i , f v , i = max ( f v , i , f u , i ) \forall i,f_{v,i}=\max(f_{v,i},f_{u,i}) ∀i,fv,i=max(

该博客是 CF919D Substring 题解。题目给定有向图,顶点为小写字母,求图上最大路径权值,有环则输出特定结果。解析时考虑 dfs/dp 不可行,用 fi,j 记录信息,结合拓扑排序完成转移,还可通过拓扑排序判环。
最低0.47元/天 解锁文章
364

被折叠的 条评论
为什么被折叠?



