#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops,fast-math,omit-frame-pointer,no-stack-protector")
#pragma GCC target("avx,avx2,fma,sse4.2,popcnt")
using namespace std;
typedef long long ll;
typedef pair<int, int> 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()
const int maxn = 3e4+7, inf = 2e9;
vector<int> dg[maxn];
int b[maxn], p[maxn], dist[maxn];
int 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(p[i]);
for (int i = 0 ; i < n ; i++)
sort(all(dg[i])), dg[i].erase(unique(all(dg[i])), dg[i].end());
for (int i = 0 ; i < n ; i++) dist[i] = inf;
priority_queue<pii, vector<pii>, greater<pii>> q;
dist[b[0]] = 0, q.push({0, b[0]});
while (!q.empty()){
auto [d, v] = q.top(); q.pop();
if (d != dist[v]) continue;
for (auto pp : dg[v]){
for (int u = v ; u < n ; u += pp)
if (dist[v] + (u-v)/pp < dist[u])
dist[u] = dist[v] + (u-v)/pp, q.push({dist[u], u});
for (int u = v ; u >= 0 ; u -= pp)
if (dist[v] + (v-u)/pp < dist[u])
dist[u] = dist[v] + (v-u)/pp, q.push({dist[u], u});
}
}
cout << (dist[b[1]] == inf ? -1 : dist[b[1]]) << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |