제출 #1271469

#제출 시각아이디문제언어결과실행 시간메모리
1271469alvaro_quispeSirni (COCI17_sirni)C++20
98 / 140
5049 ms851968 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;
      adj[u].emplace_back(it->second, key % p);
      adj[it->second].emplace_back(u, key % p);
      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);
  pq.emplace(0, 0);
  int taken = 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]) pq.emplace(w, v);
    } 
  }
  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...