Submission #737877

#TimeUsernameProblemLanguageResultExecution timeMemory
737877SkywkCrocodile's Underground City (IOI11_crocodile)C++17
100 / 100
977 ms62884 KiB
#include "crocodile.h"
#include<bits/stdc++.h>

using namespace std;

const int MAXN = 1e5;
vector<pair<int, int>> graph[MAXN+1];
int city[MAXN];
priority_queue<long long> best[MAXN+1];

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]){
    for(int i=0; i<M; i++){
        graph[R[i][0]].push_back({R[i][1], L[i]});
        graph[R[i][1]].push_back({R[i][0], L[i]});
    }
    set<pair<long long, int>> pq;
    for(int i=0; i<K; i++){
        best[P[i]].push(0);
        best[P[i]].push(0);
        pq.insert({0, P[i]});
    }
    while(!pq.empty()){
        auto [d, v] = *pq.begin();
        pq.erase(pq.begin());
        if(best[v].size() < 2 || d != best[v].top()) continue;
        for(auto [u, c] : graph[v]){
            best[u].push(d + c);
            if(best[u].size() > 2){
                if(best[u].top() == d + c){
                    best[u].pop();
                    continue;
                }
                pq.erase({u, best[u].top()});
                best[u].pop();
            }
            pq.insert({d + c, u});
        }
    }
    return best[0].top();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...