제출 #983102

#제출 시각아이디문제언어결과실행 시간메모리
983102vjudge1사이버랜드 (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...