#include<bits/stdc++.h>
using namespace std;
#define int long long
int b[60010];
int p[60010];
int dp[60010];
priority_queue<pair<int,int>> pq;
vector<int> v[60010];
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>b[i]>>p[i];
v[b[i]].push_back(i);
}
for(int i=1;i<=n+m;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();
if(x>n){
for(auto g:v[x-n-1]){
if(dp[g]>w){
dp[g]=w;
pq.push({-dp[g],g});
}
}
}
else{
for(int i=0;i<m;i++){
if((i-b[x])%p[x]==0){
if(dp[i+n+1]>abs(i-b[x])/p[x]+w){
dp[i+n+1]=abs(i-b[x])/p[x]+w;
pq.push({-dp[i+n+1],i+n+1});
}
}
}
}
}
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... |