Submission #284586

#TimeUsernameProblemLanguageResultExecution timeMemory
284586dooweyJakarta Skyscrapers (APIO15_skyscraper)C++14
22 / 100
14 ms2432 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define fi first #define se second #define mp make_pair #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); const int N = (int)3e4 + 10; map<pii, int> dist; bool has[N]; vector<int> dj[N]; int main(){ fastIO; int n, m; cin >> n >> m; deque<pii> ff; int xi, pi; int goalx = 0; for(int i = 0 ; i < m ; i ++ ){ cin >> xi >> pi; if(i == 0){ if(!dist.count(mp(xi, pi))){ dist[mp(xi, pi)] = 0; ff.push_back(mp(xi, pi)); } } if(i == 1){ goalx = xi; } dj[xi].push_back(pi); } int node, dd; int cur; while(!ff.empty()){ node = ff.front().fi; dd = ff.front().se; ff.pop_front(); cur = dist[mp(node, dd)]; if(node == goalx){ cout << cur << "\n"; return 0; } if(!has[node]){ for(auto x : dj[node]){ if(!dist.count(mp(node, x))){ dist[mp(node, x)] = cur; ff.push_front(mp(node, x)); } } has[node]=true; } if(node - dd > 0){ if(!dist.count(mp(node - dd, dd))){ dist[mp(node - dd, dd)] = cur + 1; ff.push_back(mp(node - dd, dd)); } } if(node + dd < n){ if(!dist.count(mp(node + dd, dd))){ dist[mp(node + dd, dd)] = cur + 1; ff.push_back(mp(node + dd, dd)); } } } cout << "-1\n"; return 0; }
#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...