제출 #383273

#제출 시각아이디문제언어결과실행 시간메모리
383273MODDIAwesome Arrowland Adventure (eJOI19_adventure)C++14
10 / 100
2 ms1024 KiB
#include <bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define vi vector<int> #define vl vector<ll> #define mp make_pair #define pb push_back using namespace std; int n, m; char mat[501][501]; vector<pii> G[25000]; void dijkstra(){ int dist[n * m]; for(int i = 0; i < n * m; i++) { dist[i] = 1e9; } priority_queue<pii> pq; pq.push(mp(0,0)); dist[0] = 0; while(!pq.empty()){ pii state = pq.top(); pq.pop(); if(-state.first != dist[state.first]) continue; for(auto next : G[state.second]){ int next_city = next.first, len = next.second; if(dist[next_city] > dist[state.second] + len){ dist[next_city] = dist[state.second] + len; pq.push(mp(-dist[next_city], next_city)); } } } if(dist[(n - 1) * m + m-1] == 1e9) cout<<-1<<endl; else cout<<dist[(n - 1) * m + m-1]<<endl; } inline long long vertex(int a,int b) { return a*m + b; } int main(){ cin>>n>>m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ char c; cin >> c; if (c == 'W') { if (j != 0) G[vertex(i,j)].push_back(mp(vertex(i,j-1),0)); if (i != 0) G[vertex(i,j)].push_back(mp(vertex(i-1,j),1)); if (j != m-1) G[vertex(i,j)].push_back(mp(vertex(i,j+1),2)); if (i != n-1) G[vertex(i,j)].push_back(mp(vertex(i+1,j),3)); } if (c == 'E') { if (j != 0) G[vertex(i,j)].push_back(mp(vertex(i,j-1),2)); if (i != 0) G[vertex(i,j)].push_back(mp(vertex(i-1,j),3)); if (j != m-1) G[vertex(i,j)].push_back(mp(vertex(i,j+1),0)); if (i != n-1) G[vertex(i,j)].push_back(mp(vertex(i+1,j),1)); } if (c == 'N') { if (j != 0) G[vertex(i,j)].push_back(mp(vertex(i,j-1),3)); if (i != 0) G[vertex(i,j)].push_back(mp(vertex(i-1,j),0)); if (j != m-1) G[vertex(i,j)].push_back(mp(vertex(i,j+1),1)); if (i != n-1) G[vertex(i,j)].push_back(mp(vertex(i+1,j),2)); } if (c == 'S') { if (j != 0) G[vertex(i,j)].push_back(mp(vertex(i,j-1),1)); if (i != 0) G[vertex(i,j)].push_back(mp(vertex(i-1,j),2)); if (j != m-1) G[vertex(i,j)].push_back(mp(vertex(i,j+1),3)); if (i != n-1) G[vertex(i,j)].push_back(mp(vertex(i+1,j),0)); } } } dijkstra(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...