제출 #695131

#제출 시각아이디문제언어결과실행 시간메모리
695131Cyber_WolfJakarta Skyscrapers (APIO15_skyscraper)C++17
10 / 100
33 ms22684 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<set<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]; } map<array<lg, 2>, lg> mp; for(int i = 0; i < m; i++) { lg x = b[i]+p[i], z = 1; while(x < n) { if(!mp.count({b[i], x})) { adj[b[i]].insert({x, z}); mp[{b[i], x}] = z; } else if(mp[{b[i], x}] > z) { adj[b[i]].insert({x, z}); adj[b[i]].erase(adj[b[i]].find({x, z})); mp[{b[i], x}] = z; } z++; x += p[i]; } x = b[i]-p[i]; z = 1; while(x >= 0) { if(!mp.count({b[i], x})) { adj[b[i]].insert({x, z}); mp[{b[i], x}] = z; } else if(mp[{b[i], x}] > z) { adj[b[i]].insert({x, z}); adj[b[i]].erase(adj[b[i]].find({x, z})); mp[{b[i], 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...