Submission #1233778

#TimeUsernameProblemLanguageResultExecution timeMemory
1233778AMel0nJakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
145 ms65416 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define FOR(i,N) for(ll i = 0; i < N; i++) #define all(x) (x).begin(), (x).end() // #define F first // #define S second signed main() { cin.tie(0); ios::sync_with_stdio(false); int N, M; cin >> N >> M; int st, end; vector<unordered_set<int>> B(N); // building -> power of doge inside vector<vector<pair<int,int>>> adj(N); FOR(i, M) { int b, p; cin >> b >> p; B[b].insert(p); if (i == 0) st = b; if (i == 1) end = b; } // first 2 loops are O(M), 3 loops are O(NM) FOR(u, N) { for(int dog: B[u]) { for(int v = u - dog; v >= 0; v -= dog) { adj[u].push_back({v, (u - v) / dog}); if (B[v].find(dog) != B[v].end()) break; } for(int v = u + dog; v < N; v += dog) { adj[u].push_back({v, (v - u) / dog}); if (B[v].find(dog) != B[v].end()) break; } } } priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq; vector<int> vis(N, 1e9); pq.push({0, st}); while(pq.size()) { auto [dist, u] = pq.top(); pq.pop(); if (u == end) {cout << dist; return 0;} for(auto [v, j]: adj[u]) { if (dist+j < vis[v]) { pq.push({dist+j, v}); vis[v] = dist+j; } } } cout << -1; }
#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...