// Alir3za.Zar3 -> Shiraz , Iran
#include <bits/stdc++.h>
using namespace std;
const int N = 3e4+7, Inf = 1e9+7;
int n,m,b[N],p[N],l[N]; set<int> e[N];
void in ()
{
cin >> n >> m;
for (int i=1; i<=m; i++)
{
cin >> b[i] >> p[i];
e[b[i]].insert(p[i]);
}
fill_n(l,N,Inf);
}
void Dijkstra ()
{
set<pair<int,int>> q;
l[b[1]]=0; q.insert({0,b[1]});
while (!q.empty())
{
int v = q.begin()->second;
q.erase(q.begin());
for (auto o : e[v])
{
for (int i=v+o; i<=n; i+=o)
{
e[i].erase(o);
if (l[i]>l[v]+(i-v)/o)
{
q.erase({l[i],i});
l[i] = l[v]+(i-v)/o;
q.insert({l[i],i});
}
}
for (int i=v-o; i>=0; i-=o)
{
e[i].erase(o);
if (l[i]>l[v]+(v-i)/o)
{
q.erase({l[i],i});
l[i] = l[v]+(v-i)/o;
q.insert({l[i],i});
}
}
}
}
}
void out ()
{
if (l[b[2]]==Inf)
cout << -1 << '\n';
else
cout << l[b[2]] << '\n';
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
in();
Dijkstra();
out();
}
# | 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... |