제출 #1269874

#제출 시각아이디문제언어결과실행 시간메모리
1269874picradTracks in the Snow (BOI13_tracks)C++20
89.06 / 100
2106 ms193032 KiB
#include <bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; typedef long long ll; typedef double dbl; typedef pair<ll,ll> pii; typedef pair<ll,pii> piii; const int maxn = 4e3+5; ll H,W,A[maxn][maxn],ans,dy[4] = {1,-1,0,0},dx[4] = {0,0,1,-1}; bool vis[maxn][maxn]; string S[maxn]; bool valid(int y, int x){ return y > 0 && x > 0 && y <= H && x <= W && S[y][x] != '.' && !vis[y][x]; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> H >> W; for(int i =1; i <= H; i++){ cin >> S[i]; S[i] = " "+S[i]; } if(S[1][1] == '.'){ cout << 0 << '\n'; return 0; } vis[1][1] = 1; priority_queue<piii,vector<piii>,greater<piii>> pq; pq.push({1,{1,1}}); while(!pq.empty()){ auto cur = pq.top(); pq.pop(); int y = cur.se.fi, x = cur.se.se;; ans = max(ans,cur.fi); //cout << cur.fi << " " << y << " " << x << '\n'; A[y][x] = cur.fi; for(int i =0; i < 4; i++){ int ny = y + dy[i],nx = x+dx[i]; if(!valid(ny,nx))continue; pq.push({cur.fi + (S[y][x] == S[ny][nx] ? 0:1),{ny,nx}}); vis[ny][nx] = 1; } } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...