#include "walk.h"
#include <bits/stdc++.h>
using namespace std;
#define fs first
#define sc second
#define all(x) x.begin(), x.end()
const int SIZE = 2e6 + 5;
struct d_to_v{
long long d;
int v;
d_to_v (int _v, long long _d) : v(_v), d(_d) {};
d_to_v operator+(d_to_v d2){
return d_to_v(d2.v, d + d2.d);
}
};
vector <d_to_v> graph[SIZE];
bool cmp(d_to_v a, d_to_v b){
return a.d > b.d;
}
void Dijkstra(int S, vector <long long> &dist){
bitset <SIZE> been;
priority_queue<d_to_v, vector<d_to_v>, decltype(&cmp)> pq(cmp);
pq.push(d_to_v(S, 0));
while (!pq.empty()){
d_to_v tp = pq.top();
pq.pop();
if(been[tp.v])
continue;
been[tp.v] = 1;
dist[tp.v] = tp.d;
for(auto i:graph[tp.v]){
if(been[i.v])
continue;
pq.push(tp + i);
}
}
return;
}
int ptr = 0;
vector <pair<int, long long>> pt[SIZE];
map <pair<int, long long>, int> hpt;
int idx(int a, long long b){
if(!hpt.count({a, b}))
hpt[{a, b}] = ++ptr;
return hpt[{a, b}];
}
long long min_distance(vector<int> x, vector<int> h, vector<int> l, vector<int> r, vector<int> y, int s, int g) {
int n = x.size(), m = l.size();
for (int i = 0; i < m; i++){
vector <int> id;
for (int t = l[i]; t <= r[i]; t++){
if(h[t] >= y[i])
id.push_back(t);
}
for (int j = 0; j < (int)id.size() - 1; j++){
graph[idx(id[j], y[i])].push_back(d_to_v(idx(id[j + 1], y[i]), x[id[j + 1]] - x[id[j]]));
graph[idx(id[j + 1], y[i])].push_back(d_to_v(idx(id[j], y[i]), x[id[j + 1]] - x[id[j]]));
}
}
idx(s, 0);
idx(g, 0);
for (auto i : hpt){
pt[i.fs.fs].push_back({i.sc, i.fs.sc});
}
for (int i = 0; i < n; i++){
for (int j = 0; j < (int)pt[i].size() - 1; j++){
graph[pt[i][j].fs].push_back(d_to_v(pt[i][j + 1].fs, pt[i][j + 1].sc - pt[i][j].sc));
graph[pt[i][j + 1].fs].push_back(d_to_v(pt[i][j].fs, pt[i][j + 1].sc - pt[i][j].sc));
}
}
vector <long long> vec(ptr + 1, -1);
Dijkstra(idx(s, 0), vec);
return vec[idx(g, 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... |