Submission #1299458

#TimeUsernameProblemLanguageResultExecution timeMemory
1299458nguyenkhangninh99Sirni (COCI17_sirni)C++17
140 / 140
1177 ms746844 KiB
#include <bits/stdc++.h>
using namespace std;

int f[10000005];
vector<pair<int, int>> edge[10000005];

struct DSU{
    int p[100005], sz[100005];
 
    void init(int n){
        for(int i = 1; i <= n; i++) p[i] = i, sz[i] = 1;
    }
    int find(int u){
        return (p[u] == u ? u : p[u] = find(p[u]));
    }
 
    bool unon(int u, int v){
        u = find(u); 
        v = find(v);
        if(u == v) return false;
        if(sz[u] < sz[v]) swap(u, v);
        p[v] = u;
        sz[u] += sz[v];
        return true;
    }
} dsu;

void solve(){
    int n; cin >> n;
    
    vector<int> a(n + 1);
    for(int i = 1; i <= n; i++) cin >> a[i];
    
    sort(a.begin(), a.end());
    a.erase(unique(a.begin(), a.end()), a.end());
    
    for(int i = 1; i < a.size(); i++) f[a[i]] = i;
    for(int i = a.back() - 1; i >= 1; i--) if(f[i] == 0) f[i] = f[i + 1];
    dsu.init(n);
    
    for(int i = 1; i < a.size() - 1; i++){
        edge[a[i + 1] % a[i]].push_back({i, i + 1});
        for(int j = a[i] * 2; j <= a.back(); j += a[i]) edge[a[f[j]] % a[i]].push_back({i, f[j]});
    }
    
    int ans = 0;
  
    for(int w = 0; w <= 10000000; w++){
        for(auto [u, v]: edge[w]) if(dsu.unon(u, v)) ans += w;
    }

    cout << ans;

}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    solve();
    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...