/*
https://github.com/mostafa-saad/MyCompetitiveProgramming/blob/master/Olympiad/COCI/official/2017/contest6_solutions/solutions.pdf
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define For(i, a, b) for(int i=a; i<b; i++)
#define ffi For(i, 0, N)
#define ffj For(j, 0, M)
#define ffa ffi ffj
#define s <<" "<<
#define c <<" : "<<
#define w cout
#define e "\n"
#define pb push_back
#define mp make_pair
#define a first
#define b second
//#define int ll
const int MAXN=100000, INF=1000000000;
///500,000,000
int N, big, par[MAXN], siz[MAXN], go[10000001], prea, prex, preadd;
ll out;
set<int> inp;
vector<int> vals;
vector< pair<int, int> > edges[10000001]; /// [weight] = (n1, n2)
void make(int n1, int x, int add=0) {
int a = go[x];
if (add == 0) {
if (a != prea) {
edges[vals[prea]-prex+preadd].emplace_back(n1, prea);
//w<< "connecting" s n1+1 s prea+1 c vals[prea]-prex+preadd<<e;
}
}
prea = a;
prex = x;
preadd = add;
}
int root (int x) {
if (par[x] == x) return x;
par[x] = root(par[x]);
return par[x];
}
int join(int a, int b) {
if (siz[a] > siz[b]) {
/// push b into a
siz[a] += siz[b];
par[b] = a;
}
else {
/// push a into b
siz[b] += siz[a];
par[a] = b;
}
}
main() {
//ifstream cin("test.in");
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> N;
ffi {int a; cin >> a; inp.insert(a); par[i] = i; siz[i] = 1;}
for (int i: inp) vals.pb(i); vals.pb(INF);
big = vals[vals.size()-2];
N = vals.size()-1;
go[10000000] = N;
for (int i=9999999; i>=0; i--) {
go[i] = go[i+1];
if (go[i+1] != 0 && i == vals[go[i+1]-1]) go[i]--;
}
ffi {
int x = vals[i];
make(i, x+1, 1);
for (int j=x+x; j<=big+x; j+=x) {
make(i, j);
}
}
For (i, 0, 10000001) for (auto j: edges[i]) {
int a = j.a, b = j.b;
if (root(a) == root(b)) continue;
out += i;
join(par[a], par[b]); /// just called root so this should be fine
}
w<< out<<e;
}
Compilation message
sirni.cpp: In function 'int join(int, int)':
sirni.cpp:57:1: warning: no return statement in function returning non-void [-Wreturn-type]
}
^
sirni.cpp: At global scope:
sirni.cpp:59:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
main() {
^
sirni.cpp: In function 'int main()':
sirni.cpp:64:2: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
for (int i: inp) vals.pb(i); vals.pb(INF);
^~~
sirni.cpp:64:31: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
for (int i: inp) vals.pb(i); vals.pb(INF);
^~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
665 ms |
548856 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
249 ms |
274528 KB |
Output is correct |
2 |
Runtime error |
1110 ms |
550228 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
542 ms |
548760 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
396 ms |
289556 KB |
Output is correct |
2 |
Correct |
494 ms |
316060 KB |
Output is correct |
3 |
Correct |
381 ms |
293604 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
296 ms |
276856 KB |
Output is correct |
2 |
Correct |
428 ms |
297484 KB |
Output is correct |
3 |
Correct |
383 ms |
288732 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
426 ms |
301504 KB |
Output is correct |
2 |
Correct |
538 ms |
331320 KB |
Output is correct |
3 |
Correct |
386 ms |
292580 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
325 ms |
279680 KB |
Output is correct |
2 |
Correct |
529 ms |
324592 KB |
Output is correct |
3 |
Correct |
386 ms |
292360 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
614 ms |
578220 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
723 ms |
576920 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
564 ms |
553616 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |