Submission #1006876

#TimeUsernameProblemLanguageResultExecution timeMemory
1006876overwatch9Toll (BOI17_toll)C++17
18 / 100
3059 ms4948 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int maxn = 50001; vector <pair <int, int>> adj[maxn]; ll dis[maxn]; bool processed[maxn]; queue <int> modified; ll dijkstra(int st, int ed) { fill(dis, dis + maxn, 1e18); dis[st] = 0; priority_queue <pair <ll, int>> pq; pq.push({0, st}); while (!pq.empty()) { int s = pq.top().second; pq.pop(); if (processed[s]) continue; processed[s] = true; modified.push(s); for (auto i : adj[s]) { if (dis[i.first] > dis[s] + i.second) { dis[i.first] = dis[s] + i.second; pq.push({-dis[i.first], i.first}); } } } int ans = 0; if (ed != -1) { if (dis[ed] == 1e18) dis[ed] = -1; ans = dis[ed]; while (!modified.empty()) { dis[modified.front()] = 1e18; processed[modified.front()] = false; modified.pop(); } } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int K, N, M, O; cin >> K >> N >> M >> O; for (int i = 0; i < M; i++) { int a, b, t; cin >> a >> b >> t; adj[a].push_back({b, t}); } fill(dis, dis + N + 1, 1e18); vector <pair <int, int>> queries(O); bool all0 = true; for (int i = 0; i < O; i++) { cin >> queries[i].first >> queries[i].second; if (queries[i].first != 0) all0 = false; } if (all0) dijkstra(0, -1); for (int i = 0; i < O; i++) { if (all0) { if (dis[queries[i].second] == 1e18) cout << -1 << '\n'; else cout << dis[queries[i].second] << '\n'; } else { cout << dijkstra(queries[i].first, queries[i].second) << '\n'; } } }
#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...