답안 #995997

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
995997 2024-06-10T06:55:28 Z 54skyxenon 악어의 지하 도시 (IOI11_crocodile) C++17
100 / 100
1810 ms 126916 KB
// https://oj.uz/problem/view/IOI11_crocodile

/** Needed for linking!!! */
#include "crocodile.h"

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define INF (ll)1e18

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
    vector<map<int, int>> graph(N);
    vector<set<int>> visited(N);

    for (int i = 0; i < M; i++) {
        int u = R[i][0];
        int v = R[i][1];
        graph[u][v] = graph[v][u] = L[i];
    }

    // Run Dijkstra's and only care about the second best distance, propagated downwards
    vector<vector<ll>> dist(graph.size(), {INF, INF});
    priority_queue<pair<ll, ll>> pq;

    for (int i = 0; i < K; i++) {
        pq.push({0, P[i]});
        dist[P[i]][0] = dist[P[i]][1] = 0;
    }

    while (pq.size()) {
        auto [d, u] = pq.top();
        pq.pop();
        d = -d;

        if (d > dist[u][1]) {
            continue;
        }

        // Thank you to sreepranad Devarakonda from USACO Guide
        for (auto& [v, w] : graph[u]) {
            ll cost = w + d;

            if (cost < dist[v][0]) {
                if (dist[v][0] != dist[v][1] && dist[v][0] < INF) {
                    dist[v][1] = dist[v][0];
                    pq.push({-dist[v][1], v});
                }
                dist[v][0] = cost;
            }
            else if (cost < dist[v][1]) {
                dist[v][1] = cost;
                pq.push({-cost, v});
            }
        }
    }

    return dist[0][1];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4700 KB Output is correct
5 Correct 1 ms 4700 KB Output is correct
6 Correct 1 ms 4700 KB Output is correct
7 Correct 1 ms 4700 KB Output is correct
8 Correct 2 ms 4700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4700 KB Output is correct
5 Correct 1 ms 4700 KB Output is correct
6 Correct 1 ms 4700 KB Output is correct
7 Correct 1 ms 4700 KB Output is correct
8 Correct 2 ms 4700 KB Output is correct
9 Correct 3 ms 4956 KB Output is correct
10 Correct 1 ms 4444 KB Output is correct
11 Correct 2 ms 4536 KB Output is correct
12 Correct 6 ms 5468 KB Output is correct
13 Correct 4 ms 5468 KB Output is correct
14 Correct 1 ms 4444 KB Output is correct
15 Correct 1 ms 4700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4700 KB Output is correct
5 Correct 1 ms 4700 KB Output is correct
6 Correct 1 ms 4700 KB Output is correct
7 Correct 1 ms 4700 KB Output is correct
8 Correct 2 ms 4700 KB Output is correct
9 Correct 3 ms 4956 KB Output is correct
10 Correct 1 ms 4444 KB Output is correct
11 Correct 2 ms 4536 KB Output is correct
12 Correct 6 ms 5468 KB Output is correct
13 Correct 4 ms 5468 KB Output is correct
14 Correct 1 ms 4444 KB Output is correct
15 Correct 1 ms 4700 KB Output is correct
16 Correct 1810 ms 114808 KB Output is correct
17 Correct 75 ms 37968 KB Output is correct
18 Correct 87 ms 38996 KB Output is correct
19 Correct 1611 ms 126916 KB Output is correct
20 Correct 638 ms 106668 KB Output is correct
21 Correct 33 ms 17348 KB Output is correct
22 Correct 490 ms 101556 KB Output is correct