Submission #1157382

#TimeUsernameProblemLanguageResultExecution timeMemory
1157382eudhsyfSirni (COCI17_sirni)C++20
0 / 140
287 ms65332 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back const int nmax = 1e7 + 5; int a[nmax], vis[nmax]; struct E { int u, v, w; bool operator<(const E &other) const { return w < other.w; } }; vector<E> edges; class DSU { private: vector<int> parent, rank; public: DSU(int n) { parent.resize(n + 1); rank.resize(n + 1, 0); for (int i = 1; i <= n; i++) { parent[i] = i; } } int find_set(int v) { if (v == parent[v]) return v; return parent[v] = find_set(parent[v]); } bool union_sets(int a, int b) { a = find_set(a); b = find_set(b); if (a != b) { if (rank[a] < rank[b]) swap(a, b); parent[b] = a; if (rank[a] == rank[b]) rank[a]++; return false; } return true; } }; int n; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; vis[a[i]] = i; } DSU dsu(n); sort(a + 1, a + n + 1); n = unique(a + 1, a + n + 1) - a - 1; a[n + 1] = 1e9; int m = a[n]; for (int i = 1; i <= n; i++) { for (int j = 2 * a[i]; j <= m; j += a[i]) { int l = upper_bound(a + 1, a + n + 2, j - a[i]) - a; if (a[l] <= j) { edges.push_back({i, l, a[l] % a[i]}); } } } sort(edges.begin(), edges.end()); int res = 0; for (auto [u, v, w] : edges) { if(!dsu.union_sets(u, v)) { res += w; } } 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...