# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
25509 | gabrielsimoes | Jakarta Skyscrapers (APIO15_skyscraper) | C++14 | 19 ms | 3120 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
const int MAXN = 3e4+10;
const ll INF = ll(MAXN)*ll(MAXN)*ll(MAXN);
int N, M, X, Y;
vector<int> v[MAXN];
bool ok[MAXN];
ll d[MAXN];
void dijkstra() {
for (int i = 0; i < N; i++) d[i] = INF;
d[X] = 0;
while (true) {
int cur = -1;
for (int i = 0; i < N; i++)
if (!ok[i] && (cur == -1 || d[i] < d[cur]))
cur = i;
if (cur == -1) return;
ok[cur] = true;
for (int dx : v[cur]) {
int i = cur - dx, cnt = 1;
while (i > 0)
d[i] = min(d[i], d[cur] + (cur - i)/dx),
i -= dx, cnt++;
i = cur + dx, cnt = 1;
while (i < N)
d[i] = min(d[i], d[cur] + cnt),
i += dx, cnt++;
}
}
}
int main()
{
scanf("%d %d", &N, &M);
for (int i = 0,a,b; i < M; i++) {
scanf("%d %d", &a, &b);
if (i == 0) X = a;
else if (i == 1) Y = a;
if (b != 0) v[a].push_back(b);
}
for (int i = 0; i < N; i++)
sort(v[i].begin(), v[i].end()),
v[i].resize(unique(v[i].begin(), v[i].end()) - v[i].begin());
dijkstra();
printf("%lld\n", d[Y] < INF ? d[Y] : -1);
}
Compilation message (stderr)
# | 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... |