Submission #1114492

#TimeUsernameProblemLanguageResultExecution timeMemory
1114492eysbutnoCrocodile's Underground City (IOI11_crocodile)C++17
100 / 100
299 ms62628 KiB
#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]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...