#include <bits/stdc++.h>
#define lint long long int
#define pb push_back
using namespace std;
int main() {
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<pair<int, int>>> edge(m);
for (int i = 0; i < m-1; i ++) {
for (int j = i+1; j < m; j ++) {
int dis = abs(b[i]-b[j]);
if (dis % p[i] == 0) {
edge[i].pb({j, dis/p[i]});
}
if (dis % p[j] == 0) {
edge[j].pb({i, dis/p[j]});
}
}
}
vector<lint> dist(m, 1e18+1);
dist[0] = 0;
vector<bool> visited(m, false);
priority_queue<pair<int, int>> pq;
pq.push({0, 0});
while (!pq.empty()) {
int v = pq.top().second;
pq.pop();
if (visited[v]) continue;
visited[v] = true;
for (auto [u, w] : edge[v]) {
if (dist[u] > dist[v] + w) {
dist[u] = dist[v] + w;
pq.push({-dist[u], u});
}
}
}
if (dist[1] == 1e18+1) {dist[1] = -1;}
cout << dist[1] << endl;
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... |