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 "walk.h"
#include <bits/stdc++.h>
using namespace std;
#define sz(v) int(v.size())
#define ar array
typedef long long ll;
const int N = 2e5+10;
const ll INF = 1e18+10;
template <class T>
using min_pq = priority_queue<T, vector<T>, greater<T>>;
int n, m;
vector<pair<int, int>> adj[N];
ll dist[N];
void add_edge(int a, int b, int w) {
assert(w >= 0);
adj[a].emplace_back(b, w);
adj[b].emplace_back(a, w);
}
void dijkstra(int S) {
fill(dist, dist + N, INF);
min_pq<pair<ll, int>> pq;
pq.push({dist[S] = 0, S});
while (!pq.empty()) {
auto [d_c, c] = pq.top(); pq.pop();
if (dist[c] != d_c) continue;
for (auto [nxt, w] : adj[c]) {
if (dist[nxt] > dist[c] + w) {
dist[nxt] = dist[c] + w;
pq.push({dist[nxt], nxt});
}
}
}
}
long long min_distance(vector<int> x, vector<int> h, vector<int> l, vector<int> r, vector<int> y, int s, int g) {
n = sz(x), m = sz(l);
for (int i = 0; i < m; i++) {
for (int j = l[i]; j <= r[i]; j++) {
// i * n + j
if (j > l[i]) {
add_edge(i * n + j - 1, i * n + j, x[j] - x[j-1]);
}
}
}
for (int j = 0; j < n; j++) {
vector<int> open;
for (int i = 0; i < m; i++) if (l[i] <= j && j <= r[i] && y[i] <= h[j]) {
open.push_back(i);
}
sort(open.begin(), open.end(), [&](int a, int b) { return y[a] < y[b]; });
int p = -1;
for (int i : open) {
if (p != -1) {
add_edge(i * n + j, p * n + j, y[i] - y[p]);
}
p = i;
}
}
int S = n * m;
for (int i = 0; i < m; i++) {
if (l[i] <= s && s <= r[i] && y[i] <= h[s]) {
add_edge(S, i * n + s, y[i]);
}
}
dijkstra(S);
ll ans = INF;
for (int i = 0; i < m; i++) {
if (l[i] <= g && g <= r[i] && y[i] <= h[g]) {
ans = min(ans, dist[i * n + g] + y[i]);
}
}
return (ans == INF ? -1 : ans);
}
# | 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... |