https://vjudge.net/contest/309753#overview
A--------------------------------------
据说是要dp,但是我太暴力了。
B--------------------------------------
据说是个暴力。
C--------------------------------------
找出所有位于最短路上的边。
- 把所有边存起来,方便遍历。存邻接矩阵。
- 正反,求出1到所有点的最短路和n到所有点的最短路。记1到n的最短路长度为min。
- 对于每一条从a到b的边,如果dis1[a]+[a,b]+disn[b,n]==min,就YES,否则就NO。
// 认真预习dij
// 自己瞎写的优先队列优化是错的,暂时不清楚为啥。
D--------------------------------------
以一种奇怪的方法写了出来,据说正解应该枚举灯塔然后拓展,到另一个灯塔或者墙结束。
奇怪的方法:对于每行&&每列取最外边的两个灯塔,中间的非灯塔+2,两侧的+1。
E--------------------------------------
这谁顶得住
F--------------------------------------
D的加强版,似乎可以用我原来的方法的++++++++++++版本。
G--------------------------------------
“最少多少步”,应该考虑宽搜。
使用一个三维数组step[k][i][j]记录到达(i,j)点,剩余k次魔法的最小步数。
while的时候,遇到边界、到达目的地使用魔法次数大于k、步数不是最小,都需要continue。