Submission #1175901

#TimeUsernameProblemLanguageResultExecution timeMemory
1175901AriadnaCyberland (APIO23_cyberland)C++20
0 / 100
1058 ms2162688 KiB
#include <bits/stdc++.h>
#define pb push_back
#define se second
#define fi first
using namespace std;

const int MAX_N = 1e5;
vector<vector<pair<int, int>>> adj;

double dijkstra(int n, int k, int h, vector<int>& arr) {
    vector<vector<double>> dist(n, vector<double>(k+1, 1e9)); // mínima distància a i gastant j vegades
    vector<double> dist2(n, 1e9);
    priority_queue<pair<int, pair<int, int>>> pq;
    dist[0][0] = 0;
    pq.push({0, {0, 0}});
    while (!pq.empty()) {
        double d = -pq.top().fi;
        int u = pq.top().se.fi;
        int i = pq.top().se.se;
        pq.pop();
        if (dist[u][i] != d) continue;
        if (u == h) continue;
        for (auto v: adj[u]) {
            if (!arr[v.fi]) {
                dist[v.fi][i] = 0;
                if (dist2[v.fi] > 0) {
                    dist2[v.fi] = 0;
                    pq.push({0, {v.fi, 0}});
                }
            } else {
                if (dist[v.fi][i] > d+v.se) {
                    dist[v.fi][i] = d+v.se;
                    pq.push({-dist[v.fi][i], {v.fi, i}});
                }
                if (arr[v.fi] == 2 && i+1 <= k) {
                    if (dist[v.fi][i+1] > (double)(d+v.se)/2) {
                        dist[v.fi][i+1] = (double)(d+v.se)/2;
                        pq.push({-dist[v.fi][i+1], {v.fi, i+1}});
                    }
                }
            }
        }
    }

    double ans = 1e9;
    for (int i = 0; i <= k; ++i) ans = min(ans, dist[h][i]);
    return ans;
}

double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) {
    adj = vector<vector<pair<int, int>>>(N);
    for (int i = 0; i < M; ++i) {
        adj[x[i]].pb({y[i], c[i]});
        adj[y[i]].pb({x[i], c[i]});
    }
    return dijkstra(N, K, H, arr);
}
#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...