제출 #990992

#제출 시각아이디문제언어결과실행 시간메모리
990992vjudge1악어의 지하 도시 (IOI11_crocodile)C++17
100 / 100
297 ms72092 KiB
#include<bits/stdc++.h>
using namespace std;
#define ALL(a) a.begin(), a.end()
using pii = pair<int, int>;
const int N = 1e5 + 5;

vector<pii> adj[N];
int cnt[N];

void connect(int u, int v, int w) {
    adj[u].emplace_back(v, w);
    adj[v].emplace_back(u, w);
}

int travel_plan(int n, int nEdges, int R[][2], int l[], int nExits, int a[]) {
    priority_queue<pii, vector<pii>, greater<pii>> Q;

    for(int i = 0; i < nEdges; i++)
        connect(R[i][0], R[i][1], l[i]);

    for(int i = 0; i < nExits; i++) {
        cnt[a[i]]++;
        Q.emplace(0, a[i]);
    }

    for(int i = 0; i < n; i++)
        sort(ALL(adj[i]), [&](pii a, pii b) {
        return a.second < b.second;
    });

    int ans = -1;

    while(!Q.empty()) {
        auto [weight, u] = Q.top();
        Q.pop();
        cnt[u]++;

        if(cnt[u] == 2) {
            if(u == 0) {
                ans = weight;
                break;
            }

            for(auto [v, w] : adj[u]) {
                if(cnt[v] < 2)
                    Q.emplace(weight + w, v);
            }
        }
    }

    return ans;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...