Submission #670856

#TimeUsernameProblemLanguageResultExecution timeMemory
670856finn__Sirni (COCI17_sirni)C++17
140 / 140
674 ms3096 KiB
#include <bits/stdc++.h> using namespace std; #include <bits/stdc++.h> using namespace std; struct dsu { vector<int> y; dsu(size_t n) { y = vector<int>(n, -1); } int repr(int u) { return y[u] < 0 ? u : (y[u] = repr(y[u])); } void merge(int u, int v) { u = repr(u); v = repr(v); if (u == v) return; if (y[u] < y[v]) swap(u, v); y[v] += y[u]; y[u] = v; } bool same_set(int u, int v) { return repr(u) == repr(v); } int set_size(int u) { return -y[repr(u)]; } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); size_t n; cin >> n; vector<unsigned> p(n); for (unsigned &x : p) cin >> x; sort(p.begin(), p.end()); p.resize(unique(p.begin(), p.end()) - p.begin()); n = p.size(); vector<bool> is_present(p.back() + 1, 0); for (unsigned const &x : p) is_present[x] = 1; dsu d(n); uint64_t cost = 0; for (unsigned k = 0; k <= p.back() / 2; k++) { size_t i = upper_bound(p.begin(), p.end(), k) - p.begin(); while (i < p.size()) { if (is_present[p[i]]) for (unsigned m = p[i] + k; m <= p.back(); m += p[i]) { if (is_present[m]) { size_t j = lower_bound(p.begin(), p.end(), m) - p.begin(); if (!d.same_set(i, j)) { cost += k; d.merge(i, j); if (d.set_size(i) == n) { cout << cost << '\n'; return 0; } } } } i++; } } }

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:83:47: warning: comparison of integer expressions of different signedness: 'int' and 'size_t' {aka 'long unsigned int'} [-Wsign-compare]
   83 |                             if (d.set_size(i) == 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...