#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define FOR(i,N) for(ll i = 0; i < N; i++)
#define all(x) (x).begin(), (x).end()
// #define F first
// #define S second
signed main() {
cin.tie(0); ios::sync_with_stdio(false);
int N, M;
cin >> N >> M;
int st, end;
vector<int> P(M); // doge power
vector<vector<int>> B(N); // building -> doge inside
vector<vector<pair<int,int>>> adj(N);
FOR(i, M) {
int b;
cin >> b >> P[i];
B[b].push_back(i);
if (i == 0) st = b;
if (i == 1) end = b;
}
// first 2 loops are O(M), 3 loops are O(NM)
FOR(b, N) {
for(int dog: B[b]) {
for(int m = -(b/P[dog]); m <= (N-b-1)/P[dog]; m++) {
adj[b].push_back({b+m*P[dog], abs(m)});
}
}
}
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
vector<int> vis(N, 1e9);
pq.push({0, st});
while(pq.size()) {
auto [dist, n] = pq.top();
pq.pop();
if (vis[n] <= dist) continue;
if (n == end) {cout << dist; return 0;}
vis[n] = dist;
for(auto [c, j]: adj[n]) {
pq.push({dist+j, c});
}
}
cout << -1;
}
# | 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... |