제출 #1275760

#제출 시각아이디문제언어결과실행 시간메모리
1275760PooyaDaftarianJakarta Skyscrapers (APIO15_skyscraper)C++20
57 / 100
1095 ms4816 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pii; typedef long double ld; #define all(x) x.begin(), x.end() #define fast_io ios_base::sync_with_stdio(0); cin.tie(0) #define endl '\n' #define pb push_back #define out(x) {cout << x << '\n'; return;} #define ff first #define ss second #define sz(x) (int)(x).size() #define int ll const int maxn = 1e5+7, inf = 1e18; vector<int> dg[maxn]; int b[maxn], p[maxn], dist[maxn]; int32_t main(){ fast_io; int n, m; cin >> n >> m; for (int i = 0 ; i < m ; i++) cin >> b[i] >> p[i], dg[b[i]].pb(i); for (int i = 0 ; i < n+m ; i++) dist[i] = inf; priority_queue<pii, vector<pii>, greater<pii>> q; dist[0] = 0, q.push({0, 0}); while (!q.empty()){ auto [d, v] = q.top(); q.pop(); if (d != dist[v]) continue; if (v < m){ for (int i = b[v] ; i < n ; i += p[v]){ int u = i + m; if (dist[v] + (i-b[v])/p[v] < dist[u]) dist[u] = dist[v] + (i-b[v])/p[v], q.push({dist[u], u}); } for (int i = b[v] - p[v] ; i >= 0 ; i -= p[v]){ int u = i + m; if (dist[v] + (b[v]-i)/p[v] < dist[u]) dist[u] = dist[v] + (b[v]-i)/p[v], q.push({dist[u], u}); } } else { for (auto u : dg[v-m]) if (dist[v] < dist[u]) dist[u] = dist[v], q.push({dist[u], u}); dg[v-m].clear(); } } cout << (dist[1] == inf ? -1 : dist[1]) << endl; 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...