codeforces 821D(状压构图+最短路径)
2017-06-27 16:27
260 查看
codeforces 821D(状压构图+最短路径)
codeforces
图论
构图
最短路径
题目链接
题目大意
有n*m个城市排成n行m列的矩形,相邻的城市可以互相通过。Okabe要从(1,1)走到(n,m),但是Okabe十分怕黑,所以走过的城市必须是亮的才能通过。已知有k个城市是永远亮的,其他城市都是暗的。除此之外,Okabe可以在任何一个永久都亮的城市发动魔法,让某一行或某一列暗的城市都暂时变亮。注意,两次魔法效果不能共存,也就是说,如果已经发动了魔法,再要发动魔法的话,上一次发动的魔法效果就会先消失(非永久亮的城市变回暗的),然后再发动新的魔法效果(所以如果站在暂时亮的城市发动新的魔法,就会GG)。问最少使用多少次魔法,能够使Okabe从(1,1)走到(n,m)。不能走到输出-1。2≤n,m,k≤104
解答
把永久都亮的城市,和n行、m列都看成点,共n+m+k个点。那么连边只有三种关系。点到点,永久亮的点,到四个方向永久亮的点,花费是0。
点到线(一行或一列),永久亮的点到和3个行、3个列,花费是1。
线到点,行或列到与其挨着的永久亮的点,花费是0。
总边数不超过4k+9k+9k=22k。
这些关系的维护,可以用set,vector来实现。
最后的结果,要么是走到(n,m),要么是走到第n行或第m列。
通过代码
我的代码是一边做最短路,一边加点构图,加了的点放在map里。(一开始我以为暂时亮的城市时间很短,所以经过暂时亮的城市之后必须马上到永久亮的城市,都是点和点的关系,发现题意理解错了之后,随便改了改加上了点和线的关系)
相关文章推荐
- CodeForces 25C Roads in Berland(图论-最短路径)
- codeforces 786B (线段树构图+最短路径)
- CodeForces 601A The Two Routes(最短路径)
- codeforces-3A-Shortest path of the king( 棋盘最短路径 + 贪心 )
- Codeforces 601A The Two Routes(最短路径)
- CODEFORCES 450D Jzzhu and Cities <最短路径>
- Codeforces 601A:The Two Routes 宽搜最短路径
- Codeforces 601A:The Two Routes 宽搜最短路径
- Uva821 Page Hopping(最短路径Floyd应用)
- Codeforces 96D Volleyball(最短路径)
- Codeforces 295B——Flody算法求最短路径
- Codeforces 131D. Subway 寻找环-树的最短路径
- Codeforces 131D. Subway 寻找环-树的最短路径
- CodeForces - 813C(最短路径水题)
- CodeForces 295C - Greg and Friends BFS找最短路径
- 最短路径问题
- hdu 3790 最短路径问题
- 最短路径
- 《啊哈算法》 第六章 最短路径
- 最短路径算法ford