Submission #1343305

#TimeUsernameProblemLanguageResultExecution timeMemory
1343305PakinDioxide악어의 지하 도시 (IOI11_crocodile)C++17
89 / 100
354 ms72948 KiB
#include "crocodile.h"
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int mxN = 1e5+5;

vector <pair <int, ll>> adj[mxN];

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
    for (int i = 0; i < M; i++) {
        adj[R[i][0]].emplace_back(R[i][1], L[i]);
        adj[R[i][1]].emplace_back(R[i][0], L[i]);
    }
    priority_queue <pair <ll, int>> q;
    ll dis[mxN][2];
    for (auto &E : dis) E[0] = E[1] = LLONG_MAX;
    for (int i = 0; i < K; i++) dis[P[i]][0] = dis[P[i]][1] = 0, q.emplace(0, P[i]);
    while (q.size()) {
        auto [ww, u] = q.top(); q.pop();
        ww = -ww;
        if (dis[u][1] != ww) continue;
        for (auto [v, w] : adj[u]) {
            ll nw = ww + w;
            int ok = 0;
            if (nw <= dis[v][0]) {
                dis[v][1] = dis[v][0];
                dis[v][0] = nw;
                ok = 1;
            } else if (nw < dis[v][1]) {
                dis[v][1] = nw;
                ok = 1;
            }
            if (ok && dis[v][1] < LLONG_MAX) q.emplace(-dis[v][1], v);
        }
    }
    return (dis[0][1] == LLONG_MAX ? -1 : dis[0][1]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...