제출 #1124039

#제출 시각아이디문제언어결과실행 시간메모리
1124039kustizusTracks in the Snow (BOI13_tracks)C++20
89.06 / 100
2101 ms173664 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define sz(s) (int)s.size() #define bit(i, j) ((j >> i) & 1) #define all(v) v.begin(), v.end() #define taskname "file" typedef long long ll; const int N = 4e3; int n, m, d[N + 5][N + 5]; char a[N + 5][N + 5]; bool vs[N + 5][N + 5]; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; struct node{ int val, x, y; }; struct cmp{ bool operator()(node a, node b){ return a.val > b.val; } }; priority_queue <node, vector<node>, cmp> pq; void solve(){ cin >> n >> m; for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) cin >> a[i][j]; d[1][1] = 1; vs[1][1] = true; pq.push({1, 1, 1}); int ans = 0; while (sz(pq)){ node x = pq.top(); pq.pop(); ans = max(ans, x.val); for (int k = 0; k < 4; ++k){ int i = x.x + dx[k]; int j = x.y + dy[k]; if (i < 1 || i > n || j < 1 || j > m) continue; if (vs[i][j]) continue; if (a[i][j] == '.') continue; vs[i][j] = true; d[i][j] = x.val + (a[i][j] != a[x.x][x.y]); pq.push({d[i][j], i, j}); } } cout << ans; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen(taskname".inp", "r", stdin); // freopen(taskname".out", "w", stdout); int tt = 1; // cin >> tt; while (tt--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...