Submission #281570

#TimeUsernameProblemLanguageResultExecution timeMemory
281570VimmerSky Walking (IOI19_walk)C++14
10 / 100
4086 ms55572 KiB
#include "walk.h" #include <bits/stdc++.h> #define F first #define S second #define sz(x) int(x.size()) #define pb push_back #define N 100005 using namespace std; vector <pair <int, long long> > g[N]; vector <int> nums[N], who[N]; long long dst[N], dob[N]; int idr[205][205]; long long min_distance(vector<int> x, vector<int> h, vector<int> l, vector<int> r, vector<int> y, int s, int to) { if (s == to) return 0; int n = sz(x); int m = sz(l); for (int j = 0; j < m; j++) for (int i = 0; i < n; i++) if (y[j] <= h[i] && x[l[j]] <= x[i] && x[i] <= x[r[j]]) {who[j].pb(i); nums[i].pb(j);} int id = 0; long long ans = 1e18; memset(dst, -1, sizeof(dst)); priority_queue <pair <long long, int> > qr; set <int> se; se.clear(); for (int i = 0; i < n; i++) for (auto j : nums[i]) { if (i == to) {se.insert(id); dob[id] = y[j];} idr[i][j] = id++; for (auto jr : nums[i]) { if (jr == j) break; g[id - 1].pb({idr[i][jr], abs(y[jr] - y[j])}); g[idr[i][jr]].pb({id - 1, abs(y[jr] - y[j])}); } if (s == i) {dst[id - 1] = 0; qr.push({-y[j], id - 1});} } for (int i = 0; i < n; i++) for (auto j : nums[i]) for (auto I : who[j]) { if (I == i) continue; g[idr[i][j]].pb({idr[I][j], abs(x[i] - x[I])}); } while (sz(qr)) { pair <long long, int> pt = qr.top(); qr.pop(); if (se.find(pt.S) != se.end()) ans = min(ans, -pt.F + dob[pt.S]); for (auto itr : g[pt.S]) { long long s = -pt.F + itr.S; if (dst[itr.F] != -1 && dst[itr.F] <= s) continue; dst[itr.F] = s; qr.push({-s, itr.F}); } } if (ans == 1e18) return -1; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...