#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; template using pq = priority_queue, greater>; int main(){ int H, W, h, w, nh, nw; long long alt, d, ans=1e18; cin >> H >> W; H-=2; pq> que; int dx[8] = {1, 1, 1, 0, -1, -1, -1, 0}; int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1}; vector> dist(H, vector(W, 1e18)); vector> visit(H, vector(W)); vector> field(H, vector(W)); for (int i=0; i < H; i++){ for (int j=0; j> field[i][j]; } for (int i=0; i= H || nw < 0 || nw >= W) continue; if (field[nh][nw] == -1) continue; alt = d + field[nh][nw]; if (alt < dist[nh][nw]){ dist[nh][nw] = alt; que.push({alt, nh, nw}); } } } for (int i=0; i