제출 #983102

#제출 시각아이디문제언어결과실행 시간메모리
983102vjudge1Cyberland (APIO23_cyberland)C++17
20 / 100
1118 ms2097152 KiB
#include <bits/stdc++.h> using namespace std; double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { const double INF = numeric_limits<double>::infinity(); vector<vector<pair<int, double>>> graph(N); for (int i = 0; i < M; ++i) { graph[x[i]].emplace_back(y[i], c[i]); graph[y[i]].emplace_back(x[i], c[i]); } vector<vector<double>> dist(N, vector<double>(K + 1, INF)); dist[0][K] = 0.0; priority_queue<tuple<double, int, int>, vector<tuple<double, int, int>>, greater<>> pq; pq.emplace(0.0, 0, K); while (!pq.empty()) { auto [current_time, current_country, remaining_divides] = pq.top(); pq.pop(); if (current_country == H) { return current_time; } if (current_time > dist[current_country][remaining_divides]) { continue; } for (const auto& [next_country, travel_time] : graph[current_country]) { double new_time = current_time + travel_time; if (arr[next_country] == 0) { new_time = 0.0; } if (new_time < dist[next_country][remaining_divides]) { dist[next_country][remaining_divides] = new_time; pq.emplace(new_time, next_country, remaining_divides); } if (arr[next_country] == 2 && remaining_divides > 0) { double divided_time = new_time / 2.0; if (divided_time < dist[next_country][remaining_divides - 1]) { dist[next_country][remaining_divides - 1] = divided_time; pq.emplace(divided_time, next_country, remaining_divides - 1); } } } } return -1.0; }
#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...