Submission #1245896

#TimeUsernameProblemLanguageResultExecution timeMemory
1245896daiquocSirni (COCI17_sirni)C++20
140 / 140
3218 ms434204 KiB
#include <bits/stdc++.h> using namespace std; struct Edge{ int u, v, w; Edge() {} Edge(int u, int v, int w) : u(u), v(v), w(w) {} bool operator < (const Edge& other) const { return w < other.w; } }; const int MAXN=1e5; const int MAXP=1e7; int n, nxt[MAXP+5], par[MAXN+5]; vector<int> p; vector<Edge> edges; void build(){ for(int i=0; i<n; i++) par[i]=i; } int find(int u){ if (u == par[u]) return u; return par[u]=find(par[u]); } bool dsu(int u, int v) { u=find(u); v=find(v); if(u==v) return false; par[v]=u; return true; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=0, x; i<n; i++){ cin>>x; p.push_back(x); } sort(p.begin(), p.end()); p.erase(unique(p.begin(), p.end()), p.end()); n=p.size(); for(int i=0; i<n-1; i++){ nxt[p[i]]=i; for(int j=p[i]+1; j<p[i+1]; j++){ nxt[j]=i+1; } } nxt[p[n-1]]=n-1; for(int i=0; i<n; i++){ edges.emplace_back(i, nxt[p[i]+1], p[nxt[p[i]+1]]%p[i]); for(int k=2*p[i]; k<=p[n-1]; k+=p[i]){ edges.emplace_back(i, nxt[k], p[nxt[k]]%p[i]); k=p[nxt[k]]/p[i]*p[i]; } } sort(edges.begin(), edges.end()); build(); int ans=0; for(auto& c:edges) { if(dsu(c.u, c.v)){ ans+=c.w; } } cout<<ans; }
#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...