Submission #798440

#TimeUsernameProblemLanguageResultExecution timeMemory
798440arijit_biswasTracks in the Snow (BOI13_tracks)C++17
100 / 100
669 ms119516 KiB
#include <bits/stdc++.h>
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
using namespace std;

// void setIO(string filename) {
//     freopen((filename + ".in").c_str(), "r", stdin);
//     freopen((filename + ".out").c_str(), "w", stdout);
// }

int n, m;
vector<vector<char>> snow;
vector<vector<int>> dis;
int ans;

int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};

bool check(int x, int y) {
    return (x >= 0 && x < n && y >= 0 && y < m && snow[x][y] != '.');
}

void bfs() {
    dis.assign(n, vector<int>(m, 1e9));
    deque<pair<int, int>> dq;
    dis[0][0] = 0;
    dq.push_back({0, 0});
    while (!dq.empty()) {
        auto node = dq.front(); dq.pop_front();
        int i = node.first, j = node.second;
        ans = max(ans, dis[i][j]);
        for (int k = 0; k < 4; k++) {
            int x = i + dx[k], y = j + dy[k];
            if (check(x, y)) {
                int c = (snow[x][y] == snow[i][j]) ? 0 : 1;
                if (dis[x][y] > dis[i][j] + c) {
                    dis[x][y] = dis[i][j] + c;
                    if (c == 0) {
                        dq.push_front({x, y});
                    } else {
                        dq.push_back({x, y});
                    }
                }
            }
        }
    }
}

void solution() {
    cin >> n >> m;
    snow.resize(n, vector<char>(m));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> snow[i][j];
        }
    }
    bfs();
    cout << ans + 1 << endl;
}

int main() {
    // setIO("");
    fast;
    solution();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...