CF1687C 题解
CF1687C 题解
记 ,则操作区间 可以执行,当且仅当 ,而操作后会把所有 覆盖成 ,那问题就是能否将 数组全部变成 。
考虑建一张下标从 到 的有向图,其中 到 有边,当且仅当存在一个给定的操作区间 满足 ,那问题就转化为,询问这张图中的每个点 ,是否都可以到达一个满足 的点 。
那么考虑从每个 的点 开始 BFS
,则遍历到的点总数为 等价于问题有解,那么直接暴力 BFS
的复杂度是 的。因为每个点理论上只会被遍历一次,所以复杂度瓶颈在于大量地枚举不必要的出边。
考虑减少不必要的枚举。发现某条边的枚举是不必要的,当且仅当其指向的点已被遍历过。所以,如果我们跳过对这些边的枚举,那么复杂度就是对的。故我们用 set
维护当前所有未遍历到的点,而因为出边指向的点一定是一段区间,故每次从 set
中取出该区间中任意一个未被遍历过的点,并从 set
中删去该该点,即可实现高效的遍历。容易发现,这样的复杂度是 的,就足以通过此题了。
代码比较好写,就不放了,想看的点链接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话