제출 #1346820

#제출 시각아이디문제언어결과실행 시간메모리
1346820i_love_spring악어의 지하 도시 (IOI11_crocodile)C++20
100 / 100
187 ms44744 KiB
#include "crocodile.h"
#include <bits/stdc++.h>

using namespace std;
const int inf = 1e9 + 1;

#define ar array
int travel_plan(int n, int m, int R[][2], int L[], int k, int P[]) {
    
    vector<ar<int, 2>> dist(n, {inf, inf});
    
    vector<vector<ar<int, 2>>> g(n);
    for (int i = 0; i < m;i++) {
        int u = R[i][0];
        int v = R[i][1];
        int w = L[i];
        g[u].push_back({v, w});
        g[v].push_back({u, w});
    }

    priority_queue<ar<int, 2>, vector<ar<int, 2>>, greater<ar<int, 2>> > pq;

    for (int i = 0; i < k;i++)
        dist[P[i]] = {0, 0}, pq.push({0, P[i]});
    
    while (!pq.empty()) {
        auto [w, u] = pq.top();
        pq.pop();

        if (w != dist[u][1] || w >= inf)
            continue;
        
        for (auto [v, w1] : g[u]) {
            int cur = w + w1;
            if (cur < dist[v][0])
                swap(cur, dist[v][0]);
            if (cur < dist[v][1] && cur < inf) 
                pq.push({dist[v][1] = cur, v}); 

        }
    }
    return (dist[0][1] >= inf ? -1 : dist[0][1]);
}


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