Submission #949169

#TimeUsernameProblemLanguageResultExecution timeMemory
949169vjudge1Sirni (COCI17_sirni)C++17
42 / 140
596 ms786432 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(), x.end() #define size(x) (int)x.size() template<class S, class T> bool chmin(S& a, const T& b) { return a > b ? (a = b) == b : false; } template<class S, class T> bool chmax(S& a, const T& b) { return a < b ? (a = b) == b : false; } struct DSU { vector<int> p; DSU(int n) { p.resize(n); iota(all(p), 0ll); } int find_set(int v) { return p[v] == v ? v : p[v] = find_set(p[v]); } void unite(int u, int v) { p[u] = v; } }; signed main() { cin.tie(nullptr)->sync_with_stdio(false); int n; cin >> n; int a[n]; for (int i = 0; i < n; ++i) { cin >> a[i]; } DSU g(n); vector<array<int, 3>> edge; for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { edge.push_back({min(a[i] % a[j], a[j] % a[i]), i, j}); } } sort(all(edge)); int res = 0; for (auto [c, a, b] : edge) { a = g.find_set(a), b = g.find_set(b); if (a == b) continue; g.unite(a, b); res += c; } cout << res; }
#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...