이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define mk make_pair
#define endl '\n'
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const ll inf = 1e18 + 50;
const int N = 2050, M = 30050;
ll n, m, b[M], p[M], dis[N];
ll adj[N][N];
set<pll> st;
void solve() {
cin >> n >> m;
for (int x = 0; x < n; x++) {
dis[x] = inf;
for (int y = 0; y < n; y++) {
if (x == y) continue;
adj[x][y] = inf;
}
}
for (int i = 0; i < m; i++) {
cin >> b[i] >> p[i];
for (int x = b[i]%p[i]; x < n; x += p[i]) {
adj[b[i]][x] = min(adj[b[i]][x], abs(x-b[i])/p[i]);
}
}
dis[b[0]] = 0;
st.insert({dis[b[0]], b[0]});
while (st.size()) {
int u = st.begin()->S;
st.erase(st.begin());
for (int v = 0; v < n; v++) {
if (dis[u] + adj[u][v] < dis[v]) {
st.erase({dis[v], v});
dis[v] = dis[u] + adj[u][v];
st.insert({dis[v], v});
}
}
}
cout << (dis[b[1]] >= inf? -1: dis[b[1]]) << endl;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
solve();
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... |