Submission #1070068

#TimeUsernameProblemLanguageResultExecution timeMemory
1070068PlurmSirni (COCI17_sirni)C++11
140 / 140
505 ms42508 KiB
#include <bits/stdc++.h>
using namespace std;

bitset<10000005> bs;
int par[100005];
int bck[10000005];
int fn(int x) {
    if (par[x] == -1)
        return x;
    else
        return par[x] = fn(par[x]);
}
bool un(int x, int y) {
    x = fn(x);
    y = fn(y);
    if (x == y)
        return false;
    par[x] = y;
    return true;
}
int main() {
    memset(par, -1, sizeof(par));
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    vector<int> v;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        bs[x] = true;
        v.push_back(x);
    }
    sort(v.begin(), v.end());
    v.resize(unique(v.begin(), v.end()) - v.begin());
    for (int i = 0; i < v.size(); i++)
        bck[v[i]] = i;
    long long ans = 0ll;
    int join = 0;
    for (int k = 0; k <= 10000000; k++) {
        for (int i = 0; i < v.size(); i++) {
            if (!bs[v[i]])
                continue;
            for (int j = v[i] + k; j <= 10000000; j += v[i]) {
                if (bs[j] && un(bck[j], i)) {
                    ans += k;
                    join++;
                }
            }
        }
        if (join + 1 == v.size())
            break;
    }
    cout << ans << endl;
    return 0;
}

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:36:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |     for (int i = 0; i < v.size(); i++)
      |                     ~~^~~~~~~~~~
sirni.cpp:41:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |         for (int i = 0; i < v.size(); i++) {
      |                         ~~^~~~~~~~~~
sirni.cpp:51:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |         if (join + 1 == v.size())
      |             ~~~~~~~~~^~~~~~~~~~~
#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...