제출 #1253516

#제출 시각아이디문제언어결과실행 시간메모리
1253516anfi사이버랜드 (APIO23_cyberland)C++20
0 / 100
1085 ms2162688 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second const long double INF = 1e30; struct State { int node; int used; long double dist; bool operator<(const State& other) const { return dist > other.dist; // for min-heap } }; double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { vector<vector<pair<int, long double>>> adj(N); for (int i = 0; i < M; i++) { adj[x[i]].emplace_back(y[i], (long double)c[i]); adj[y[i]].emplace_back(x[i], (long double)c[i]); } vector<vector<long double>> dist(N, vector<long double>(K + 1, INF)); priority_queue<State> pq; for (int start : arr) { dist[start][0] = 0.0; pq.push({start, 0, 0.0}); } while (!pq.empty()) { State cur = pq.top(); pq.pop(); int u = cur.node, used = cur.used; long double d = cur.dist; if (d > dist[u][used]) continue; for (auto& [v, w] : adj[u]) { if (used + 1 <= K && dist[v][used + 1] > d + w) { dist[v][used + 1] = d + w; pq.push({v, used + 1, dist[v][used + 1]}); } } } long double ans = INF; for (int i = 0; i <= K; i++) { ans = min(ans, dist[H][i]); } return (ans >= INF ? -1.0 : (double)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...