UVA658题解

考察算法:

最短路+状态压缩!

本篇题解更侧重为大家讲解一下本道题的做题思路,以及以后碰到此类提该如何解题。

首先读完题后先看数据范围,当看到 \(n\le20\) 时,我们可以大体知道对这道题该使用什么算法:要么爆搜,要么状压

我们可以考虑是否可以用状压解决。

首先先找到状压的对象,我们既然要状压,状压的数据范围肯定要小于 \(30\),事实上小于 \(25\) 为宜,那么状压每个 bug 是否被修复是个不错的选择。

选择完压缩的状态之后,就该考虑用什么算法实现解题了。仔细观察后发现,既然我们要使一个状态转移到另一个状态,何不考虑状压 dp 呢?但是先别急着做,我们再想想后发现,这些需要转移的状态是有后效性的,所以不能直接 dp。

那么我们该怎么办呢?

我们要求修复的时间最短,为何不采用最短路算法呢?

做法:

我们先考虑常规建边,但是把每个状态都建一条边会有 \(2 \times 10^7\) 条边,这样跑最短路显然会超时。仔细思考后发现,其实没必要建边我们在跑最短路的时候直接判断每个状态的转移是否合法就行了,这一点其他的题解已经讲得很详细了,我就不再赘叙啦 qwq。

解决完这个问题之后,本道题基本就可以切掉啦!

AC 记录

如有不严谨的地方,欢迎及时在评论区艾特我。

END-

posted @ 2023-06-06 17:27  Pwtking  阅读(16)  评论(0)    收藏  举报