首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
cf877D
】的更多相关文章
cf877D
题意简述:矩阵中有的点不能走,你每次可从四个方向走,至少走一步,最多走k步(不能横跨那些不能走的格子),问从(sx,sy)走到(tx,ty)的最短时间是多少? 题意:利用set来加速bfs的过程,原理是一个点一旦走过就不需要再去走了,具体看代码 #include <bits/stdc++.h> using namespace std; const int N = 1002; bool G[N][N]; int n, m, k, d[N][N]; set<int> xs[N], ys…
CodeForces CF877D题解(BFS+STL-set)
解法\(1:\) 正常的\(bfs\)剪枝是\(\Theta(nm4k)\),这个时间复杂度是只加一个\(vis\)记录的剪枝的,只能保证每个点只进队一次,并不能做到其他的减少时间,所以理论上是过不了的.\(n*m*4*k=4*10^9\). 这里提供一个\(codeforces\)的官方解法:\(STL-set\)优化\(bfs\).使用\(set\)主要是能够快速找到当前行和列有那个点没有被找到过,每行每列单独建立一个\(set\),\(set<int>\ line[N],col[N]\)…