제출 #1289289

#제출 시각아이디문제언어결과실행 시간메모리
1289289harryleeeJakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
74 ms9960 KiB
#include<bits/stdc++.h> using namespace std; const int maxn = 3e4, block = 170; int n, m; vector<int> adj[maxn]; int dis[maxn], st, en; bool vis[maxn][block]; inline int dijkstra(){ priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; for (int i = 0; i < n; ++i) dis[i] = 1e9; memset(vis, false, sizeof(vis)); dis[st] = 0; pq.push({0, st}); while(!pq.empty()){ int u = pq.top().second, cur_dis = pq.top().first; pq.pop(); if (cur_dis != dis[u]) continue; for (int v : adj[u]){ for (int i = u + v, step = 1; i < n; i += v, step++){ if (cur_dis + step < dis[i]){ dis[i] = cur_dis + step; pq.push({dis[i], i}); } if (v < block){ if (vis[i][v]) break; vis[i][v] = true; } } for (int i = u - v, step = 1; i >= 0; i -= v, step++){ if (cur_dis + step < dis[i]){ dis[i] = cur_dis + step; pq.push({dis[i], i}); } if (v < block){ if (vis[i][v]) break; vis[i][v] = true; } } } } if (dis[en] == 1e9) return -1; return dis[en]; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 0; i < m; ++i){ int pos, jump; cin >> pos >> jump; adj[pos].push_back(jump); if (i == 0) st = pos; if (i == 1) en = pos; } for (int i = 0; i < n; ++i){ sort(adj[i].begin(), adj[i].end()); adj[i].erase(unique(adj[i].begin(), adj[i].end()), adj[i].end()); } cout << dijkstra(); 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...