Submission #41607

#TimeUsernameProblemLanguageResultExecution timeMemory
41607MatheusLealVJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
288 ms67304 KiB
#include <bits/stdc++.h> #define N 30050 #define f first #define s second using namespace std; typedef pair<int, int> pii; int n, m, casa[N], len[N], dist[N]; unordered_set<int> pos[N]; vector<pii> grafo[N]; priority_queue<pii, vector<pii>, greater<pii> > pq; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>m>>n; for(int i = 1; i <= n; i++) { cin>>casa[i]>>len[i]; pos[ casa[i] ].insert( len[i] ); } for(int i = 0; i < m; i++) { for(auto x: pos[i]) { for(int j = i + x; j < m; j += x) { grafo[i].push_back({j, (j - i)/x}); if(pos[j].count(x)) break; } for(int j = i - x; j >= 0; j -= x) { grafo[i].push_back({j, (i - j)/x}); if(pos[j].count(x)) break; } } } for(int i = 0; i < m; i++) dist[i] = 2000000000; dist[ casa[1] ] = 0; pq.push({0, casa[1]}); while(!pq.empty()) { int x = pq.top().s, d = pq.top().f; pq.pop(); if(d > dist[x]) continue; for(auto v: grafo[x]) { if(dist[v.f] > dist[x] + v.s) { dist[v.f] = dist[x] + v.s; pq.push({dist[v.f], v.f}); } } } cout<<(dist[casa[2]] != 2000000000 ? dist[casa[2]] : -1)<<'\n'; }
#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...