Submission #880377

#TimeUsernameProblemLanguageResultExecution timeMemory
880377MisterReaperCrocodile's Underground City (IOI11_crocodile)C++17
100 / 100
659 ms77804 KiB
#include <bits/stdc++.h>
using namespace std;

// [node cnt, edge cnt, edges, vals, exit cnt, exits]
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
    vector <pair <int, int>> adj[N];
    for(int i = 0; i < M; i++) {
        int u = R[i][0], v = R[i][1], w = L[i];
        adj[u].emplace_back(v, w);
        adj[v].emplace_back(u, w);
    }

    using T = pair <int, int>;
    priority_queue <T, vector <T>, greater <T>> pq;

    vector <int> cnt(N);
    vector <int> special(N);
    vector <int> ans(N, -1);

    for(int i = 0; i < K; i++) {
        int node = P[i];
        special[node] = true;
        pq.emplace(0, node);
    }

    while(!pq.empty()) {
        auto [c, node] = pq.top();
        pq.pop();

        cnt[node]++;
        if(special[node]) {
            if(cnt[node] != 1) {
                continue;
            }
        } else {
            if(cnt[node] != 2) {
                continue;
            }
        }

        ans[node] = c;
        for(auto [child, w] : adj[node]) {
            pq.emplace(c + w, child);
        }
    }

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