UVA658题解
考察算法:
最短路+状态压缩!
本篇题解更侧重为大家讲解一下本道题的做题思路,以及以后碰到此类提该如何解题。
首先读完题后先看数据范围,当看到 \(n\le20\) 时,我们可以大体知道对这道题该使用什么算法:要么爆搜,要么状压。
我们可以考虑是否可以用状压解决。
首先先找到状压的对象,我们既然要状压,状压的数据范围肯定要小于 \(30\),事实上小于 \(25\) 为宜,那么状压每个 bug 是否被修复是个不错的选择。
选择完压缩的状态之后,就该考虑用什么算法实现解题了。仔细观察后发现,既然我们要使一个状态转移到另一个状态,何不考虑状压 dp 呢?但是先别急着做,我们再想想后发现,这些需要转移的状态是有后效性的,所以不能直接 dp。
那么我们该怎么办呢?
我们要求修复的时间最短,为何不采用最短路算法呢?
做法:
我们先考虑常规建边,但是把每个状态都建一条边会有 \(2 \times 10^7\) 条边,这样跑最短路显然会超时。仔细思考后发现,其实没必要建边,我们在跑最短路的时候直接判断每个状态的转移是否合法就行了,这一点其他的题解已经讲得很详细了,我就不再赘叙啦 qwq。
解决完这个问题之后,本道题基本就可以切掉啦!
如有不严谨的地方,欢迎及时在评论区艾特我。
END-

浙公网安备 33010602011771号