#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e18;
int32_t main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int N, M;
cin >> N >> M;
vector<int> B(M), P(M);
for(int i = 0; i < M; i++){
cin >> B[i] >> P[i];
}
vector<vector<int>> doges_by_pos(N);
for(int i = 0; i < M; i++){
doges_by_pos[B[i]].push_back(i);
}
int tot = N + M;
vector<int> dist(tot, INF);
deque<int> dq;
dist[N + 0] = 0;
dq.push_back(N + 0);
vector<bool> visited_pos(N, false); // har bir pozitsiyani faqat bir marta ishlash
while(!dq.empty()){
int u = dq.front(); dq.pop_front();
if(u >= N){
int j = u - N;
int b = B[j], p = P[j];
for(int d = -1; d <= 1; d += 2){
int nb = b + d * p;
if(nb >= 0 && nb < N && dist[nb] > dist[u] + 1){
dist[nb] = dist[u] + 1;
dq.push_back(nb);
}
}
} else {
int b = u;
if(visited_pos[b]) continue; // faqat bir marta uzatamiz
visited_pos[b] = true;
for(int j : doges_by_pos[b]){
int v = N + j;
if(dist[v] > dist[b]){
dist[v] = dist[b];
dq.push_front(v);
}
}
}
}
int ans = dist[N + 1];
if(ans >= INF)
cout << -1 << "\n";
else
cout << ans << "\n";
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... |