Submission #1272841

#TimeUsernameProblemLanguageResultExecution timeMemory
1272841soabAirplane (NOI23_airplane)C++20
0 / 100
1 ms568 KiB
#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; const long long INF = 1e18; // Use a large value for infinity int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; int m; cin >> n >> m; vector<long long> a(n + 1); for (int i = 1; i <= n; ++i) { cin >> a[i]; } vector<vector<int>> adj(n + 1); for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } // --- Dijkstra 1: Calculate up[i] from source 1 --- vector<long long> up(n + 1, INF); priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> pq_up; up[1] = a[1]; // Start time at region 1 is its altitude requirement (which is 0) pq_up.push({up[1], 1}); while (!pq_up.empty()) { long long time_u = pq_up.top().first; int u = pq_up.top().second; pq_up.pop(); if (time_u > up[u]) { continue; } for (int v : adj[u]) { long long new_time_v = max(time_u + 1, a[v]); if (new_time_v < up[v]) { up[v] = new_time_v; pq_up.push({up[v], v}); } } } // --- Dijkstra 2: Calculate down[i] from source n --- vector<long long> down(n + 1, INF); priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<pair<long long, int>>> pq_down; down[n] = a[n]; // Start time at region n is its altitude requirement (which is 0) pq_down.push({down[n], n}); while (!pq_down.empty()) { long long time_v = pq_down.top().first; int v = pq_down.top().second; pq_down.pop(); if (time_v > down[v]) { continue; } for (int u : adj[v]) { // Iterating neighbors long long new_time_u = max(time_v + 1, a[u]); if (new_time_u < down[u]) { down[u] = new_time_u; pq_down.push({down[u], u}); } } } // --- Combine results to find the minimum total time --- long long min_total_time = INF; for (int i = 1; i <= n; ++i) { min_total_time = min(min_total_time, up[i] + down[i]); } cout << min_total_time << 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...