제출 #582273

#제출 시각아이디문제언어결과실행 시간메모리
582273Ronin13Sirni (COCI17_sirni)C++14
112 / 140
5115 ms615668 KiB
#include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define f first #define s second #define pii pair<int,int> #define pll pair<ll,ll> #define pb push_back #define epb emplace_back using namespace std; void lastshot(){ cout << "FUCK THIS SHIT I'M OUT!\n"; } void debug(){ cout << "WHAT A STUPID\n"; } //WELCOME TO PROJECT MAYHEM // rule #1: You don't ask questions about project MAYHEM // rule #2: You don't ask questions about project MAYHEM const int PMAX = 1e7 + 5; const int NMAX = 2e5 + 1; int p[PMAX]; int last[PMAX]; vector <vector <int> > g(NMAX); vector <int>par(NMAX); vector <int> sz(NMAX); void make_set(int v){ par[v] = v; sz[v] = 1; } int find_set(int v){ return par[v] == v ? v : par[v] = find_set(par[v]); } void union_sets(int a, int b){ a = find_set(a); b = find_set(b); if(a != b){ if(sz[a] < sz[b]) swap(a, b); par[b] = a; sz[a] += sz[b]; } } int main(){ int n; cin >> n; set <int> st; for(int i = 1; i <= n; i++){ int x; cin >> x; st.insert(x); } int ind = 0; for(int to : st){ p[to] = ++ind; } int l = 10000001; for(int i = 10000001; i >= 1; i--){ if(p[i]) last[i] = i, l = i; else last[i] = l; } // cout << 1; ind = 1; vector <pair <ll, pii> > edges; for(int to : st){ int x = last[to + 1]; if(x < 2 * to && x < 1e7 + 1) edges.pb({x - to, {ind, p[x]}}); for(int i = 2 * to; i <= 1e7; i += to){ x = last[i]; if(x > 1e7) break; if(x > 1e7 || x >= i + to) continue; edges.pb({x - i, {p[x], ind}}); } ind++; } //cout << 1; for(int i = 1; i < ind; i++){ make_set(i); } sort(edges.begin(), edges.end()); ll sum = 0; for(auto to : edges){ // cout << to.f << ' ' << to.s.f << ' ' << to.s.s << "\n"; int x = to.s.f, y = to.s.s; if(find_set(x) == find_set(y)) continue; union_sets(x, y); sum += to.f; } cout << sum; 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...