이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll INF = 1e18;
int n, m, s[30030], p[30030];
ll d[30030];
vector<array<int, 2>> v[30030];
set<int> st[30030], did[30030];
priority_queue<array<int, 2>> pq;
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m;
for(int i=0;i<m;i++) {
cin >> s[i] >> p[i];
st[s[i]].insert(p[i]);
}
for(int i=0;i<m;i++) {
if(did[s[i]].count(p[i])) continue;
did[s[i]].insert(p[i]);
for(int j=1;;j++) {
int x = s[i]-p[i]*j;
if(x < 0) break;
v[s[i]].push_back({x, j});
if(st[x].count(p[i])) break;
}
for(int j=1;;j++) {
int x = s[i]+p[i]*j;
if(x >= n) break;
v[s[i]].push_back({x, j});
if(st[x].count(p[i])) break;
}
}
fill(d, d+n, INF);
d[s[0]] = 0, pq.push({0, s[0]});
while(!pq.empty()) {
auto [c, u] = pq.top(); pq.pop();
if(-c > d[u]) continue;
for(auto [x, y] : v[u]) if(y-c < d[x]) d[x] = y-c, pq.push({c-y, x});
}
cout << (d[s[1]] == INF ? -1 : d[s[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... |