제출 #953793

#제출 시각아이디문제언어결과실행 시간메모리
953793tnknguyen_Jakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
579 ms20368 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define pii pair<int, int> const int MX = 3e5 + 5; int INF; vector<int> gr[MX]; int b[MX], p[MX]; int d[MX], vi[MX]; int n, m; // ------------ FUNCTIONS ----------- void bfs(){ memset(d, 63, sizeof d); INF = d[0]; priority_queue<pii> q; q.push({0, b[1]}); d[b[1]] = 0; while(q.size()){ int w, u; tie(w, u) = q.top(); w = -w; q.pop(); if(w != d[u]){ continue; } for(int pw : gr[u]){ for(int i = u + pw, c = 1; i < n; i += pw, ++c){ if(d[u] + c < d[i]){ d[i] = d[u] + c; q.push({-d[i], i}); } } for(int i = u - pw, c = 1; i >= 0; i -= pw, ++c){ if(d[u] + c < d[i]){ d[i] = d[u] + c; q.push({-d[i], i}); } } } } } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("main.inp","r",stdin); //freopen("main.out","w",stdout); cin>>n>>m; for(int i=1; i<=m; ++i){ cin>>b[i]>>p[i]; gr[b[i]].push_back(p[i]); } bfs(); cout<<(d[b[2]] == INF ? -1 : d[b[2]]); 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...