Submission #1253502

#TimeUsernameProblemLanguageResultExecution timeMemory
1253502anfiCyberland (APIO23_cyberland)C++20
20 / 100
1040 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; const double INF = 1e18; double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { vector<vector<double>> dist(N, vector<double>(K+1, INF)); using T = pair<double, pair<int,int>>; priority_queue<T, vector<T>, greater<T>> pq; dist[0][0] = 0; pq.push({0.0, {0, 0}}); while (!pq.empty()) { auto [d, uc] = pq.top(); pq.pop(); int u = uc.first, used = uc.second; if (d > dist[u][used]) continue; if (u == H) break; for (int i = 0; i < M; i++) { int v = -1, w = -1; if (x[i] == u) { v = y[i]; w = c[i]; } else if (y[i] == u) { v = x[i]; w = c[i]; } else continue; double nd = d + w; int nk = used; if (arr[v] == 0) { nd = 0; } else if (arr[v] == 2 && used < K) { nd = nd / 2.0; nk = used + 1; } if (nd + 1e-12 < dist[v][nk]) { dist[v][nk] = nd; pq.push({nd, {v, nk}}); } } } double ans = INF; for (int k = 0; k <= K; k++) { ans = min(ans, dist[H][k]); } if (ans >= INF/2) 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...