Codeforces 346D Robot Control(01BFS)
题意
有一个 个点, 条边的有向图, 初始有一个机器人在 号点. 每个时刻, 这个机器人会随机选择一条从该点出发地边并通过.当机器人到达点 时, 它就会自动关闭.
然而这个机器人如果在某个时刻到达自己曾经到过的点的话, 它就会爆炸. 因此, 你决定对机器人实施一些命令, 让它在某些时候按照规定的边走, 而非随机选择.
问对机器人最少使用多少条命令可以让它安全到达点 .
题解
十分巧妙的一道好题~
首先可以无视掉 “不能到达曾经到过的点” 的限制, 因为最优答案一定不会存在这种情况.
因为到达曾经到过的点,你至少要付出更多代价才能回到这个点,所以绝对不优。
然后我们就可以考虑一个 了,令 为 走到 需要的最少命令。
那么显然有一个转移:
这个意义是很明显的,就不解释了。
这个本质上是个 BFS 问题,用个双端队列维护就行了, 加到队首, 加到队尾就行了。
具体实现的时候,我们只有在第一次到达这个点的时候会更新 ,因为是 BFS 最早到的肯定是距离较小的点。
也就是队列中的点 单调不下降。
然后最后一次到达这个点才会更新 ,同样这是 BFS 最晚到的点。
每个点我们只会访问一次,所以最后一次到达就是它入度减少到 的时候。
复杂度是 的。
总结
对于一类图上有关 的 问题能考虑 BFS 队列的 单调不下降的性质来转移。
代码
记得要把边反向,以及入度也要反向。
__EOF__

本文作者:zjp_shadow
本文链接:https://www.cnblogs.com/zjp-shadow/p/9562888.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/zjp-shadow/p/9562888.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
标签:
01BFS
, codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】