제출 #798875

#제출 시각아이디문제언어결과실행 시간메모리
798875NeroZeinShortcut (IOI16_shortcut)C++17
23 / 100
2065 ms332 KiB
#include "bits/stdc++.h" #include "shortcut.h" using namespace std; const long long INF = 1e15; long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c){ auto dij = [&](int src, vector<vector<pair<int, int>>>& g) { vector<long long> dis(n, INF); dis[src] = 0; priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> pq; pq.emplace(0, src); long long ret = 0; while (!pq.empty()) { auto [cur, v] = pq.top(); pq.pop(); if (cur != dis[v]) continue; if (v != src) { ret = max(ret, cur + d[v]); } for (auto [u, w] : g[v]) { if (cur + w < dis[u]) { dis[u] = cur + w; pq.emplace(dis[u], u); } } } ret += d[src]; return ret; }; auto get = [&](int i, int j, vector<vector<pair<int, int>>> g) { g[i].emplace_back(j, c); g[j].emplace_back(i, c); long long ret = 0; for (int v = 0; v < n; ++v) { ret = max(ret, dij(v, g)); } return ret; }; vector<vector<pair<int, int>>> g(n); g[0].emplace_back(1, l[0]); for (int i = 1; i < n - 1; ++i) { g[i].emplace_back(i - 1, l[i - 1]); g[i].emplace_back(i + 1, l[i]); } g[n - 1].emplace_back(n - 2, l[n - 2]); long long ans = INF; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { ans = min(ans, get(i, j, g)); } } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...