今日も、明日も、輝いている。|

Aquizahv

园龄:2年粉丝:0关注:7

CF2023C C+K+S 题解

前置知识:哈希/KMP

题目链接:洛谷Codeforces


有点牛的一道题。

首先,既然两张图所有的环长都是 k 的倍数,那么考虑做一个比较厉害的处理:对图染色。令 u 的颜色为 cu,如果有边 uv,那么 cv=(cu+1)modk。这样最多有 k 种颜色,范围是 [0,k)

然后考虑将两张图合并的过程,显然也要遵循以上的染色规则。那么对于每个出点 s,都要有一个入点 t 使得 ct=(cs+1)modk

于是一种可行的方案就是:将第二张图的颜色不停循环位移,如果存在一种方案,使「第一张图染 x 的颜色的出点数」等于「第二张图染 (x+1)modk 的颜色的入点数」(反之亦然),那么说明存在题目所求方案。这个时间复杂度是 O(n2) 的。

观察一下上述过程,发现随着第二张图的颜色的轮换,统计每个颜色出现几次的 cnt 数组的元素也在轮换。所以只需第二张图的入点 cnt 数组是第一张图的出点 cnt 数组的轮换(反之亦然),倍长之后哈希/KMP 判断即可。时间复杂度是 O(n)

本文作者:Aquizahv's Blog

本文链接:https://www.cnblogs.com/aquizahv/p/18567529

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Aquizahv  阅读(12)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起