제출 #1183522

#제출 시각아이디문제언어결과실행 시간메모리
1183522meicrisToll (BOI17_toll)C++17
8 / 100
3095 ms4480 KiB
#include <iostream>
#include <vector>
#include <queue>
#include <limits>
using namespace std;
const int INF = 1e9;
struct Edge {
    int to, cost;
};
int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int K, N, M, O;
    cin >> K >> N >> M >> O;
    vector<vector<Edge>> graph(N);
    for (int i = 0; i < M; ++i) {
        int a, b, t;
        cin >> a >> b >> t;
        if (b / K == (a / K) + 1) {
            graph[a].push_back({b, t});
        }
    }
    for (int i = 0; i < O; ++i) {
        int start, end;
        cin >> start >> end;
        vector<int> dist(N, INF);
        dist[start] = 0;
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;
        pq.push({0, start});
        while (!pq.empty()) {
            auto [d, u] = pq.top(); pq.pop();
            if (d > dist[u]) continue;

            for (const Edge& e : graph[u]) {
                if (dist[e.to] > dist[u] + e.cost) {
                    dist[e.to] = dist[u] + e.cost;
                    pq.push({dist[e.to], e.to});
                }
            }
        }
        if (dist[end] == INF)
            cout << -1 << endl;
        else
            cout << dist[end] << endl;
    }
    return 0;
}

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