#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
void speed()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
struct cell
{
int to,st,tim,ind;
bool operator<(const cell&a)const
{
return a.st>st;
}
};
int n,m,used[505][505],ti[100005],dogtim[100005];
cell a[100005];
vector<cell>v[100005];
priority_queue<cell>q;
void prec()
{
for(int i=1;i<=n;i++)
{
ti[i]=1e9;
}
for(int j=1;j<=m;j++)
{
dogtim[j]=1e9;
}
dogtim[1]=0;
}
void dijkstra()
{
cell w,nb;
w.st=a[1].st;
w.to=a[1].to;
w.ind=1;
w.tim=0;
q.push(w);
int izm=0;
while(!q.empty())
{
w=q.top();
q.pop();
if(w.ind==2)
{
cout<<w.tim<<endl;
exit(0);
}
if(dogtim[w.tim]<w.tim)continue;
if(w.st<300)
{
if(used[w.st][w.to%w.st])continue;
used[w.st][w.to%w.st]=1;
}
izm=0;
//cout<<w.ind<<endl;
for(int i=w.to+w.st;i<=n;i+=w.st)
{
izm++;
if(ti[i]<=w.tim+izm)continue;
ti[i]=w.tim+izm;
//cout<<w.ind<<" "<<i<<endl;
for(int j=0;j<v[i].size();j++)
{
nb.st=v[i][j].st;
nb.to=i;
nb.tim=ti[i];
nb.ind=v[i][j].ind;
q.push(nb);
dogtim[v[i][j].ind]=ti[i];
}
}
izm=0;
for(int i=w.to-w.st;i>=1;i-=w.st)
{
izm++;
if(ti[i]<=w.tim+izm)continue;
ti[i]=w.tim+izm;
for(int j=0;j<v[i].size();j++)
{
nb.st=v[i][j].st;
nb.to=i;
nb.tim=ti[i];
nb.ind=v[i][j].ind;
q.push(nb);
dogtim[v[i][j].ind]=ti[i];
}
}
}
}
void read()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].to>>a[i].st;
a[i].to++;
a[i].ind=i;
v[a[i].to].push_back(a[i]);
}
//cout<<endl;
prec();
dijkstra();
}
int main()
{
speed();
read();
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... |