답안 #1114492

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1114492 2024-11-19T05:56:06 Z eysbutno 악어의 지하 도시 (IOI11_crocodile) C++17
100 / 100
299 ms 62628 KB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int travel_plan(int n, int m, int r[][2], 
                int l[], int k, int p[]) {
    vector<vector<array<int, 2>>> adj(n);
    for (int i = 0; i < m; i++) {
        adj[r[i][0]].push_back({r[i][1], l[i]});
        adj[r[i][1]].push_back({r[i][0], l[i]});
    }

    // we use 1e9 instead of INT_MAX to prevent overflow
    const array<int, 2> DEF = {(int) 1e9, (int) 1e9};
    vector<array<int, 2>> dist(n, DEF);
    priority_queue<array<int, 2>> pq;
    for (int i = 0; i < k; i++) {
        pq.push({0, p[i]});
        dist[p[i]] = {0, 0};
    }

    while (!pq.empty()) {
        auto [time, at] = pq.top();
        pq.pop();
        time *= -1; // undoing the negative number trick
        if (dist[at][1] < time) { continue; }
        for (const auto [nxt, weight] : adj[at]) {
            if (time + weight < dist[nxt][0]) {
                if (dist[nxt][0] < dist[nxt][1]) {
                    pq.push({-dist[nxt][0], nxt});
                }
                dist[nxt][1] = dist[nxt][0];
                dist[nxt][0] = time + weight;
            } else if (time + weight < dist[nxt][1]) {
                dist[nxt][1] = time + weight;
                pq.push({-dist[nxt][1], nxt});
            }
        }
    }
    return dist[0][1];
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4432 KB Output is correct
2 Correct 1 ms 4432 KB Output is correct
3 Correct 1 ms 4432 KB Output is correct
4 Correct 1 ms 4432 KB Output is correct
5 Correct 2 ms 4432 KB Output is correct
6 Correct 2 ms 4432 KB Output is correct
7 Correct 2 ms 4432 KB Output is correct
8 Correct 2 ms 4432 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4432 KB Output is correct
2 Correct 1 ms 4432 KB Output is correct
3 Correct 1 ms 4432 KB Output is correct
4 Correct 1 ms 4432 KB Output is correct
5 Correct 2 ms 4432 KB Output is correct
6 Correct 2 ms 4432 KB Output is correct
7 Correct 2 ms 4432 KB Output is correct
8 Correct 2 ms 4432 KB Output is correct
9 Correct 3 ms 4688 KB Output is correct
10 Correct 1 ms 4432 KB Output is correct
11 Correct 2 ms 4604 KB Output is correct
12 Correct 4 ms 4816 KB Output is correct
13 Correct 3 ms 5112 KB Output is correct
14 Correct 1 ms 4548 KB Output is correct
15 Correct 2 ms 4432 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 4432 KB Output is correct
2 Correct 1 ms 4432 KB Output is correct
3 Correct 1 ms 4432 KB Output is correct
4 Correct 1 ms 4432 KB Output is correct
5 Correct 2 ms 4432 KB Output is correct
6 Correct 2 ms 4432 KB Output is correct
7 Correct 2 ms 4432 KB Output is correct
8 Correct 2 ms 4432 KB Output is correct
9 Correct 3 ms 4688 KB Output is correct
10 Correct 1 ms 4432 KB Output is correct
11 Correct 2 ms 4604 KB Output is correct
12 Correct 4 ms 4816 KB Output is correct
13 Correct 3 ms 5112 KB Output is correct
14 Correct 1 ms 4548 KB Output is correct
15 Correct 2 ms 4432 KB Output is correct
16 Correct 283 ms 56480 KB Output is correct
17 Correct 53 ms 15532 KB Output is correct
18 Correct 57 ms 16812 KB Output is correct
19 Correct 299 ms 62628 KB Output is correct
20 Correct 173 ms 47944 KB Output is correct
21 Correct 23 ms 9040 KB Output is correct
22 Correct 187 ms 46252 KB Output is correct