제출 #1164930

#제출 시각아이디문제언어결과실행 시간메모리
1164930chiqouz7Sirni (COCI17_sirni)C++20
0 / 140
259 ms248372 KiB
#include <bits/stdc++.h> using namespace std; #define f first #define s second #define ll long long const int N = 1e5; int p[N+1] = {}; int sz[N+1] = {}; int find(int a){ if(a == p[a]) return a; return p[a] = find(p[a]); } void unite(int a, int b){ if(a != b){ if(sz[a] < sz[b]) swap(a, b); p[b] = a; sz[a] += sz[b]; } } int main() { int n; cin>>n; vector<int> v(n); int m = 0; for(int i = 0; i < n; i++){ p[i] = i; sz[i] = 1; cin>>v[i]; m = max(m, v[i]); } sort(v.begin(), v.end()); vector<vector<pair<int, int> > > e(m); for(int i = 0; i < n; i++){ for(int j = v[i]; j <= m; j+=v[i]){ int x = j; auto it = lower_bound(v.begin(), v.end(), x); int ind = it-v.begin(); if(j == v[i]) ind++; if(ind < n && v[ind] < (x+v[i])) e[v[ind]-x].push_back({i, ind}); // if(j == 1) } } ll ans = 0; for(int i = 0; i < m; i++){ for(int j = 0; j < e[i].size(); j++){ int a = find(e[i][j].f); int b = find(e[i][j].s); if(a != b){ unite(a,b); ans += i; } } } cout<<ans; 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...