Submission #1164921

#TimeUsernameProblemLanguageResultExecution timeMemory
1164921chiqouz7Sirni (COCI17_sirni)C++20
0 / 140
281 ms263088 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<pair<int, pair<int, int> > > edge; vector<pair<int, pair<int, int> > > edges; for(int i = 0; i < n; i++){ for(int j = 1; j*v[i] <= m; j++){ int x = j*v[i]; auto it = lower_bound(v.begin(), v.end(), x); int ind = it-v.begin(); if(j == 1) ind++; if(ind < n && v[ind] < (x+v[i])) edge.push_back({v[ind]-x, {i, ind}}); // if(j == 1) } } vector<vector<pair<int, int> > > e(m); for(int i = 0; i < edge.size(); i++){ e[edge[i].f].push_back(edge[i].s); } 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...