int dx[] = {0, 1}, dy[] = {1, 0}; while (qe.size()) { auto t = qe.front(); qe.pop(); int xy = t.first, v = t.second;
int x = xy / m, y = xy % m; for (int i = 0; i < 2; ++ i) { int a = x + dx[i], b = y + dy[i]; if (a >= 0 && a < n && b >= 0 && b < m && v + grid[a][b] > matrix[a][b]) { matrix[a][b] = v + grid[a][b]; qe.push({a * m + b, v + grid[a][b]}); } }