Submission #1139302

#TimeUsernameProblemLanguageResultExecution timeMemory
1139302ChottuFSirni (COCI17_sirni)C++20
0 / 140
82 ms15800 KiB
#include <bits/stdc++.h> using namespace std; struct DSU { vector<int> parent, min_val; DSU(int n, const vector<int>& arr) { parent.resize(n); min_val.resize(n); for (int i = 0; i < n; ++i) { parent[i] = i; min_val[i] = arr[i]; } } int find(int x) { if (parent[x] != x) { parent[x] = find(parent[x]); } return parent[x]; } void merge(int a, int b) { a = find(a); b = find(b); if (a == b) return; if (min_val[a] < min_val[b]) { parent[b] = a; } else { parent[a] = b; } } int get_min(int x) { return min_val[find(x)]; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<int> arr(n); for (int i = 0; i < n; ++i) { cin >> arr[i]; } if (n == 1) { cout << 0 << '\n'; return 0; } sort(arr.begin(), arr.end()); int m = arr[0]; if (m == 1) { cout << 0 << '\n'; return 0; } DSU dsu(n, arr); unordered_map<int, vector<int>> value_indices; for (int i = 0; i < n; ++i) { value_indices[arr[i]].push_back(i); } int max_val = arr.back(); vector<int> unique_values; for (int i = 0; i < n; ++i) { if (i == 0 || arr[i] != arr[i-1]) { unique_values.push_back(arr[i]); } } for (int x : unique_values) { vector<int>& indices = value_indices[x]; if (indices.empty()) continue; int root = indices[0]; for (size_t i = 1; i < indices.size(); ++i) { dsu.merge(root, indices[i]); } for (long long k = 2; ; ++k) { long long y = (long long)x * k; if (y > max_val) break; if (value_indices.find(y) != value_indices.end()) { vector<int>& y_indices = value_indices[y]; if (y_indices.empty()) continue; dsu.merge(root, y_indices[0]); } } } int m_root = dsu.find(0); unordered_set<int> components; for (int i = 0; i < n; ++i) { components.insert(dsu.find(i)); } int total = 0; for (int root : components) { if (dsu.find(root) == dsu.find(m_root)) continue; int current_min = dsu.get_min(root); total += current_min % m; } cout << total << '\n'; return 0; }
#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...