#include<bits/stdc++.h>
using namespace std;
#define int long long
int b[30010];
int p[30010];
int dp[30010];
priority_queue<pair<int,int>> pq;
vector<int> v[30010];
signed main(){
int n,m;
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>b[i]>>p[i];
v[b[i]].push_back(i);
dp[i]=LLONG_MAX;
}
dp[1]=0;
pq.push({0,1});
while(pq.empty()==0){
int w=-pq.top().first;
int x=pq.top().second;
if(x==2)
break;
if(w!=dp[x]){
pq.pop();
continue;
}
pq.pop();
for(int i=1;i<=m;i++){
if(i==b[x])
continue;
if((i-b[x])%p[x]==0){
for(int j:v[i])
if(dp[j]>abs(b[j]-b[x])/p[x]+w){
dp[j]=abs(b[j]-b[x])/p[x]+w;
pq.push({-dp[j],j});
}
}
}
}
if(dp[2]==LLONG_MAX){
cout<<"-1";
return 0;
}
cout<<dp[2];
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... |