#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
const double INF = 1e30;
double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr){
    vector<pair<int,int>> adj[N];
    for(int i = 0; i < M; i++){
        adj[x[i]].emplace_back(y[i], c[i]);
        adj[y[i]].emplace_back(x[i], c[i]);
    }
    vector<vector<double>> dist(N, vector<double>(K+1, INF));
    priority_queue<tuple<double,int,int>, vector<tuple<double,int,int>>, greater<>> pq;
    dist[0][0] = 0.0;
    pq.emplace(0.0, 0, 0);
    while(!pq.empty()){
        auto [cost, u, kused] = pq.top(); pq.pop();
        if(cost > dist[u][kused] + 1e-9) continue;
        for(auto &[v, w] : adj[u]){
            double ncost = cost + w;
            // 1. Normal move
            if(dist[v][kused] > ncost + 1e-9){
                dist[v][kused] = ncost;
                pq.emplace(ncost, v, kused);
            }
            // 2. Jika negara v adalah tipe RESET (arr[v] == 0), kita bisa reset waktu ke 0 setelah sampai di v
            if(arr[v] == 0 && dist[v][kused] > 0.0 + 1e-9){
                dist[v][kused] = 0.0;
                pq.emplace(0.0, v, kused);
            }
            // 3. Jika negara v adalah bagi-dua (arr[v]==2) dan kita belum pakai K kali
            if(arr[v] == 2 && kused < K){
                double hcost = ncost / 2.0;
                if(dist[v][kused+1] > hcost + 1e-9){
                    dist[v][kused+1] = hcost;
                    pq.emplace(hcost, v, kused+1);
                }
            }
        }
    }
    double ans = INF;
    for(int i = 0; i <= K; i++) ans = min(ans, dist[H][i]);
    return (ans >= INF/2 ? -1.0 : ans);
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |