【题解】CF919D Substring 题解

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

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(

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值