제출 #1167513

#제출 시각아이디문제언어결과실행 시간메모리
1167513ByeWorldSirni (COCI17_sirni)C++20
140 / 140
1288 ms784780 KiB
#include <bits/stdc++.h> // #define int long long #define ll long long #define pb push_back #define fi first #define se second #define lf (id<<1) #define rg ((id<<1)|1) #define md ((l+r)>>1) #define ld long double using namespace std; typedef pair<int,int> pii; typedef pair<char,char> pcc; typedef pair<int,pii> ipii; typedef pair<pii,pii> ipiii; const int MAXN = 1e7+10; const int MAXA = 1e7+10; const int INF = 1e9+10; const int SQRT = 300; const int LOG = 20; const ld EPS = 1e-6; const int MOD = 1e9+7; int sum(int a, int b){ return (a+b)%MOD; } void chsum(int &a, int b){ a = (a+b)%MOD; } void chsub(int &a, int b){ a = (a+MOD-b)%MOD; } int mul(int a, int b){ return (a*b)%MOD; } void chmul(int &a, int b){ a = (a*b)%MOD; } void chmn(int &a, int b){ a = min(a, b); } void chmx(int &a, int b){ a = max(a, b); } int expo(int a, int b){ if(b==0) return 1; int te = expo(a, b/2); te = mul(te,te); return (b%2 ? mul(te,a) : te); } int n, nx[MAXN]; vector <int> a; vector<pii> edge[MAXN]; struct dsu { int par[MAXN]; void bd(){ for(int i=1; i<=MAXN-10; i++) par[i] = i; } int f(int x){ return (par[x]==x ? x : par[x]=f(par[x])); } bool con(int x, int y){ return f(x) == f(y); } void mer(int x, int y){ x = f(x); y = f(y); par[x] = y; } } DSU; signed main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n; for(int i=1; i<=n; i++){ int x; cin >> x; a.pb(x); } sort(a.begin(), a.end()); a.resize(unique(a.begin(), a.end()) - a.begin()); n = a.size(); int id = 0; for(int i=1; i<=MAXN-10; i++){ while(id<a.size() && a[id]<i) id++; if(id==a.size()) break; nx[i] = a[id]; } for(int i=0; i+1<n; i++) edge[a[i+1] % a[i]].pb({a[i], a[i+1]}); for(auto val : a){ for(int nw=val; nw<MAXN-5; nw+=val){ if(nx[nw]==0) continue; edge[nx[nw] % val].pb({val, nx[nw]}); } } ll ans = 0; DSU.bd(); for(int i=0; i<MAXN-5; i++){ for(auto in : edge[i]){ if(DSU.f(in.fi) == DSU.f(in.se)) continue; ans += i; DSU.mer(in.fi, in.se); } } cout << ans << '\n'; }
#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...