제출 #1170186

#제출 시각아이디문제언어결과실행 시간메모리
1170186nguyenkhangninh99Sirni (COCI17_sirni)C++17
140 / 140
1301 ms746288 KiB
#include <bits/stdc++.h> using namespace std; int f[10000005]; vector<pair<int, int>> edge[10000005]; struct DSU{ int p[100005]; void init(int n){ for(int i = 1; i <= n; i++) p[i] = i; } 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; p[v] = u; 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...