제출 #1170174

#제출 시각아이디문제언어결과실행 시간메모리
1170174nguyenkhangninh99Sirni (COCI17_sirni)C++20
84 / 140
2327 ms851968 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn = 1e7 + 5; vector<pair<int, int>> edge[maxn]; struct DSU{ int p[maxn], sz[maxn]; 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); sz[u] += sz[v]; 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()); 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]){ int id = lower_bound(a.begin(), a.end(), j) - a.begin(); edge[a[id] % a[i]].push_back({i, id}); } } int ans = 0; for(int w = 0; w <= 1e7; w++){ for(auto [u, v]: edge[w]){ if(dsu.unon(u, v)) ans += w; } } cout << ans; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); }
#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...