제출 #695125

#제출 시각아이디문제언어결과실행 시간메모리
695125Cyber_WolfJakarta Skyscrapers (APIO15_skyscraper)C++17
36 / 100
253 ms262144 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define lg long long #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); //Jakarta Skyscraper const lg N = 300005; lg dist[N], in_queue[N]; vector<pair<lg, lg>> adj[N]; vector<lg> b(N), p(N); void dijkstra(lg src) { priority_queue<array<lg, 2>> pq; pq.push({0, src}); in_queue[src] = 1; memset(dist, 0x3f, sizeof(dist)); dist[src] = 0; while(pq.size()) { lg x = pq.top()[1]; in_queue[x] = 0; pq.pop(); for(auto [it, c] : adj[x]) { if(dist[it] > dist[x]+c) { dist[it] = dist[x]+c; if(!in_queue[it]) pq.push({-dist[it], it}); in_queue[it] = true; } } } return; } int main() { fastio; lg n, m; cin >> n >> m; for(int i = 0; i < m; i++) { cin >> b[i] >> p[i]; } for(int i = 0; i < m; i++) { lg x = b[i]+p[i], z = 1; while(x < n) { adj[b[i]].push_back({x, z}); z++; x += p[i]; } x = b[i]-p[i]; z = 1; while(x >= 0) { adj[b[i]].push_back({x, z}); z++; x -= p[i]; } } dijkstra(b[0]); if(dist[b[1]] == dist[N-1]) { cout << "-1\n"; return 0; } cout << dist[b[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...