제출 #876614

#제출 시각아이디문제언어결과실행 시간메모리
876614vjudge1Tracks in the Snow (BOI13_tracks)C++17
86.88 / 100
2111 ms1045716 KiB
#include <iostream> #include <vector> #include <queue> #define endl '\n' #define pb push_back using namespace std; int n, h, w; const int MAXN = 2e7; string mat[4000]; queue<int> q[2]; vector<int> adj[MAXN]; bool tp[MAXN], used[MAXN]; int main(){ ios::sync_with_stdio(0);cin.tie(0); cin >> h >> w; for(int i=0; i<h; i++) cin >> mat[i]; for(int i=0; i<h; i++){ for(int j=0; j<w; j++){ if(mat[i][j] == '.') continue; int v = (i*w) + j; int u = (i+1)*w + j; if(i < (h-1) && mat[i+1][j] != '.'){ adj[v].pb(u); adj[u].pb(v); } u = (i*w) + j + 1; if(j < (w-1) && mat[i][j+1] != '.'){ adj[v].pb(u); adj[u].pb(v); } tp[v] = (mat[i][j] == 'F')? 0 : 1; } } int p, cnt=0; if(mat[0][0] == 'F'){ q[0].push(0); p = 0; } else{ q[1].push(0); p = 1; } used[0] = 1; while(!q[0].empty() || !q[1].empty()){ while(!q[p].empty()){ int v = q[p].front(); q[p].pop(); for(int u : adj[v]){ if(used[u]) continue; q[tp[u]].push(u); used[u] = 1; } } p ^= 1; cnt++; } cout << cnt << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...