제출 #1271471

#제출 시각아이디문제언어결과실행 시간메모리
1271471alvaro_quispeSirni (COCI17_sirni)C++20
140 / 140
4670 ms647632 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ii = pair<int, int>; using vi = vector<int>; using vl = vector<ll>; #define dbg(x) cerr << #x << " = " << (x) << endl; #define raya cerr << " ==================== " << endl; #define rep(i, a, b) for (auto i = a; i < (b); ++i) #define sz(x) (int)(x).size() #define all(x) begin(x), end(x) int main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); int n; cin >> n; using vii = vector<ii>; vector<vii> adj(n); map<int,int> ids; for (auto i = 0; i < n; i++) { int x; cin >> x; if (not ids.count(x)) ids[x]=sz(ids); } while(sz(ids)) { auto it = ids.begin(); auto [p, u] = *it; ids.erase(it); auto key = p; while(1) { it = ids.lower_bound(key); if (it == ids.end()) break; key=it->first; int v = it->second; int w = key%p; adj[u].emplace_back(v, w); adj[v].emplace_back(u, w); key += p - key%p; } } //for(auto& nei: adj) { // for(auto& [v, w]: nei) cout << v <<","<<w<<" " <<' '; // cout <<'\n'; //} ll ans = 0; priority_queue<ii, vii, greater<ii>> pq; vector<bool> used(n, 0); int inf = int(1e8); vi dist(n, inf); pq.emplace(0, 0); int taken = 0; dist[0] = 0; while(sz(pq)) { auto [d, u] = pq.top(); pq.pop(); if (used[u]) continue; used[u] = 1; ++taken; ans+= d; if (taken == n) break; for(auto& [v, w]: adj[u]) { if (not used[v] and w < dist[v]) { pq.emplace(w, v); dist[v]=w; } } } cout << ans <<'\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...
#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...