专栏文章

题解:P10646 [NordicOI 2023] ChatNOI

P10646题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min8m9st
此快照首次捕获于
2025/12/01 22:21
3 个月前
此快照最后确认于
2025/12/01 22:21
3 个月前
查看原文
很妙的题。
每次加入一个字符串可以看作是一种转移,可以把这个过程抽象成一个图论问题。那么就可以把 kk 个连续的单词看作是一个点,对于每个连续 k+1k+1 的单词,从前 kk 个单词的点连一条到后 kk 个单词所代表的点的边,边权是这个长度为 k+1k+1 的连续段的出现次数。
由于每个长度为 k+1k+1 的连续段对应着唯一的一条边,所以边权总和是不超过 nn 的,容易证明边权种类数至多是 O(n)\mathcal O(\sqrt n) 的。
这样子假设最终答案的字符串组质量为 xx,那么相当于从起点开始走 mm 步,每次经过的边权必须不小于 xx
那么我们可以把询问离线下来,从大到小枚举边权的种类,把边从大到小加入,然后建反图跑拓扑排序,求出每个点开始的最长路,然后更新答案即可。如果从某个点开始能经过环,那么从这个点开始就可以无限走。
由于边权种类至多是 O(n)\mathcal O(\sqrt n) 的,所以上述做法是 O(n(n+q))\mathcal O(\sqrt n(n+q)) 的,实际上跑不满,很容易通过。

评论

0 条评论,欢迎与作者交流。

正在加载评论...