제출 #41605

#제출 시각아이디문제언어결과실행 시간메모리
41605MatheusLealVJakarta Skyscrapers (APIO15_skyscraper)C++14
36 / 100
627 ms262144 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]; vector<int> pos[N]; vector<pii> grafo[N]; priority_queue<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]; if(binary_search( pos[ casa[i] ].begin(), pos[ casa[i] ].end(), len[i]) == false) pos[ casa[i] ].push_back(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(binary_search(pos[j].begin(), pos[j].end(), x)) break; } for(int j = i - x; j >= 0; j -= x) { grafo[i].push_back({j, (i - j)/x}); if(binary_search(pos[j].begin(), pos[j].end(), 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...