#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |