#include "cyberland.h"
#include <bits/stdc++.h>
#pragma GCC optimize "O3,unroll-loops,trapv"
#pragma GCC target "abm,bmi,bmi2,popcnt,lzcnt,avx,avx2"
#define fi first
#define se second
#define pb push_back
#define REP(i,o,n) for(auto i=o;i<n;i++)
using namespace std;
// #define __int128 long long
double cost[200100][70];
double mem[70];
vector<pair<int, double>> adj[200100];
vector<int> arr;
vector<int> src;
void dfs(int node, int H){
    if(cost[node][0]>0)return;
    cost[node][0]=100;
    if(arr[node]==0)src.pb(node);
    if(src.size()&&src.back()==H)return;
    if(node==H)return;
    for(auto i:adj[node])dfs(i.fi,H);
}
double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) {
    REP(i,0,N+10)adj[i].clear();
    REP(i,0,N+10)REP(j,0,70)cost[i][j]=-1;
    ::arr=arr;
    src.clear();
    REP(i,0,M){
        adj[x[i]].pb({y[i],c[i]});
        adj[y[i]].pb({x[i],c[i]});
    }
    double tmp=1;
    REP(i,0,70)mem[i]=tmp,tmp*=2;
    src.pb(0);
    dfs(0,H);
    REP(i,0,N+10)REP(j,0,70)cost[i][j]=-1;
    if(src.size() && src.back()==H)return 0;
    K = min(K,67);
    // return src.size();
    priority_queue<pair<double,pair<int,int>>,vector<pair<double,pair<int,int>>>,greater<pair<double,pair<int,int>>>> pq;
    for(auto i:src)pq.push({0,{i,0}});
    while(pq.size()){
        auto top=pq.top();pq.pop();
        assert(top.fi>=0);
        if(top.se.se > K)continue;
        if(cost[top.se.fi][top.se.se]>=0)continue;
        cost[top.se.fi][top.se.se]=top.fi;
        // cerr<<"POS "<<top.se.fi<<", JUMP "<<top.se.se<<": "<<(long long)top.fi<<endl;
        if(top.se.fi == H)continue;
        for(auto i:adj[top.se.fi]){
            if(arr[i.fi]==2)pq.push({top.fi+mem[top.se.se]*i.se,{i.fi,top.se.se+1}});
            pq.push({top.fi+mem[top.se.se]*i.se,{i.fi,top.se.se}});
        }
    }
    // return cost[H][0];
    double ans=cost[H][0];
    // assert(ans>=0);
    // assert(0);
    double div=1;
    REP(i,0,K+1){
        if(cost[H][i]>=0)ans=(min(ans,((double)cost[H][i])/div));
        div*=2;
    }
    return 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... |