제출 #432208

#제출 시각아이디문제언어결과실행 시간메모리
432208MonchitoShortcut (IOI16_shortcut)C++14
0 / 100
2061 ms320 KiB
#include "shortcut.h" #include <queue> #include <algorithm> using namespace std; using ll = long long; const int MAXN = 2e6; const ll INF = 1e18; int N; vector<int> G[300]; vector<ll> W[300]; ll dijkstra(int x) { priority_queue<pair<ll, int>> q; vector<ll> dist(N, INF); dist[x] = 0; q.push(make_pair(-0, x)); while(!q.empty()) { pair<ll, int> p = q.top(); q.pop(); int u = p.second; if(-p.first != dist[u]) continue; for(int i=0; i<(int)G[u].size(); i++) { int v = G[u][i]; ll w = W[u][i]; if(-p.first + w < dist[v]) { dist[v] = -p.first + w; q.push(make_pair(-dist[v], v)); } } } ll ret=0; for(int i=0; i<N; i++) ret = max(ret, dist[i]); return ret; } ll calc() { ll ret=0; for(int i=0; i<N; i++) ret = max(ret, dijkstra(i)); return ret; } void create_link(int u, int v, ll w) { G[u].push_back(v); W[u].push_back(w); G[v].push_back(u); W[v].push_back(w); } ll find_shortcut(int n, vector<int> l, vector<int> d, int c) { N = n; for(int i=0; i<n-1; i++) create_link(i, i+1, l[i]); for(int i=0; i<n; i++) { if(d[i] == 0) continue; create_link(i, N, d[i]); N++; } ll ret = INF; for(int i=0; i<n; i++) { for(int j=i+1; j<n; j++) { create_link(i, j, c); ret = min(ret, calc()); G[i].pop_back(); W[i].pop_back(); G[j].pop_back(); W[j].pop_back(); } } return ret; }
#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...