Submission #1039906

#TimeUsernameProblemLanguageResultExecution timeMemory
1039906vjudge1Crocodile's Underground City (IOI11_crocodile)C++17
100 / 100
1357 ms211212 KiB
#include "bits/stdc++.h"
#include "crocodile.h"
#define i64 long long

using namespace std;

const i64 inf = 1e18 + 18;
const i64 sz = 1e5 + 5;

vector<vector<i64>> aj[sz];

bool vi[sz];
i64 d[sz][2];

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
    for (int i = 0; i < M; i++) {
        i64 le = R[i][0];
        i64 ri = R[i][1];
        aj[le].push_back({ri, L[i]});
        aj[ri].push_back({le, L[i]});
    }

    for (i64 i = 0; i < N; i++) {
        d[i][0] = inf;
        d[i][1] = inf;
    }

    priority_queue<vector<i64>> pq;

    for (i64 i = 0; i < K; i++) {
        pq.push({0, P[i]});
        d[P[i]][0] = 0;
        d[P[i]][1] = 0;
    }

    while (!pq.empty()) {
        auto vc = pq.top();
        pq.pop();
        i64 v = vc[1];
        i64 ev = -vc[0];

        if (vi[v]) {
            continue;
        }

        vi[v] = true;

        if (ev >= inf) {
            continue;
        }

        for (auto& uc : aj[v]) {
            i64 u = uc[0];
            i64 eu = uc[1];

            if (vi[u]) {
                continue;
            }

            if (ev + eu < d[u][0]) {
                d[u][1] = d[u][0];
                d[u][0] = ev + eu;
            } else {
                d[u][1] = min(d[u][1], ev + eu);
            }

            pq.push({-d[u][1], u});
        }
    }

    return d[0][1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...