CF1687C 题解

CF1687C 题解

ci=j=1iajbj,则操作区间 [l,r] 可以执行,当且仅当 cr=cl1,而操作后会把所有 ci(i[l,r]) 覆盖成 cl1,那问题就是能否将 c 数组全部变成 0

考虑建一张下标从 0n 的有向图,其中 ji 有边,当且仅当存在一个给定的操作区间 [l,r] 满足 l=i<jr,那问题就转化为,询问这张图中的每个点 u,是否都可以到达一个满足 ci=0 的点 i

那么考虑从每个 ci=0 的点 i 开始 BFS,则遍历到的点总数为 n+1 等价于问题有解,那么直接暴力 BFS 的复杂度是 O(nm) 的。因为每个点理论上只会被遍历一次,所以复杂度瓶颈在于大量地枚举不必要的出边。

考虑减少不必要的枚举。发现某条边的枚举是不必要的,当且仅当其指向的点已被遍历过。所以,如果我们跳过对这些边的枚举,那么复杂度就是对的。故我们用 set 维护当前所有未遍历到的点,而因为出边指向的点一定是一段区间,故每次从 set 中取出该区间中任意一个未被遍历过的点,并从 set 中删去该该点,即可实现高效的遍历。容易发现,这样的复杂度是 O(nlogn) 的,就足以通过此题了。

代码比较好写,就不放了,想看的点链接

posted @   GaryH  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示