제출 #1272001

#제출 시각아이디문제언어결과실행 시간메모리
1272001pvb.tunglamJakarta Skyscrapers (APIO15_skyscraper)C++20
36 / 100
1097 ms64792 KiB
#include <bits/stdc++.h> #define hash _hash_ #define left _left_ #define y1 _y1_ using namespace std; using ll = long long; const ll oo = (ll)1e18; const int MAXM = 30009; int N, M; int B[MAXM], P[MAXM]; vector<pair<int,ll>> adj[MAXM]; ll dista[MAXM]; void Dijkstra() { for (int i = 0; i < M; i++) dista[i] = oo; priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>>> pq; dista[0] = 0; pq.push({0, 0}); while (!pq.empty()) { auto [cost, u] = pq.top(); pq.pop(); if (cost != dista[u]) continue; if (u == 1) { // đích theo ý bạn (index 1) cout << cost << '\n'; return; } for (auto &e : adj[u]) { int v = e.first; ll w = e.second; if (dista[v] > cost + w) { dista[v] = cost + w; pq.push({dista[v], v}); } } } cout << -1 << '\n'; } void solve() { cin >> N >> M; for (int i = 0; i < M; ++i) { adj[i].clear(); } // đọc input và tạo danh sách các p xuất hiện unordered_map<int, vector<int>> sources; // p -> list index i có P[i]==p sources.reserve(M * 2); for (int i = 0; i < M; ++i) { cin >> B[i] >> P[i]; sources[P[i]].push_back(i); } // Với mỗi p xuất hiện, nhóm tất cả trạm theo B[j] % p (tất cả j) for (auto &pr : sources) { int p = pr.first; // build groups: rem -> list of indices j (tất cả trạm j) unordered_map<int, vector<int>> groups; groups.reserve(M * 2 / max(1, (int)sources.size())); for (int j = 0; j < M; ++j) { int rem = B[j] % p; groups[rem].push_back(j); } // cho mỗi nguồn i có P[i]==p, nối đến mọi j trong cùng rem for (int i_idx : pr.second) { int rem_i = B[i_idx] % p; auto &vec = groups[rem_i]; for (int j : vec) { if (j == i_idx) continue; ll w = llabs((ll)B[i_idx] - (ll)B[j]) / p; // chia hết vì cùng rem mod p adj[i_idx].push_back({j, w}); } } } Dijkstra(); } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); 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...