#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define all(x) (x).begin(), (x).end()
template<typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p)
{
return os << "(" << p.F << "," << p.S << ")";
}
template<typename T>
void print(const T &v, int lim = 1e9)
{
for(auto x : v)
if(lim-- > 0) cout << x << " ";
cout << endl;
}
template<typename T>
void print(T *begin, const T *end)
{
for(T *it = begin; it < end; it++)
cout << *it << " ";
cout << endl;
}
vector<array<int, 2>> adj[30000];
set<int> st[30000];
int32_t main()
{
ios::sync_with_stdio(0); cin.tie(NULL);
int n, m;
cin >> n >> m;
for(int i = 0; i < m; i++)
{
int pos, d;
cin >> pos >> d;
if(pos >= n || d == 0)
{
for(;;);
}
for(int i = 1; pos + i * d < n; i++)
{
adj[pos].push_back({i, pos + i * d});
}
for(int i = 1; pos - i * d >= 0; i++)
{
adj[pos].push_back({i, pos - i * d});
}
}
vector<int> dist(n, 1e9);
using nd = pair<int, int>;
priority_queue<nd, vector<nd>, greater<>> q;
dist[0] = 0;
q.push({0, 0});
while(!q.empty())
{
auto [c, i] = q.top(); q.pop();
for(auto [w, j] : adj[i])
{
if(c + w < dist[j])
{
dist[j] = c + w;
q.push({c + w, j});
}
}
}
int ans = dist[1];
if(ans == 1e9) cout << "-1\n";
else cout << ans << "\n";
}
# | 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... |