Submission #1214416

#TimeUsernameProblemLanguageResultExecution timeMemory
1214416rkgenaSirni (COCI17_sirni)C++20
42 / 140
788 ms851968 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define IOS ios::sync_with_stdio(0); cin.tie(0); #define lli long long int #define pb push_back #define all(x) x.begin(),x.end() #define rep(i,a,b) for(int i=a;i<=b;i++) #define repp(i,a,b) for(int i=a;i>=b;i--) #define vi vector<lli> #define vvi vector<vi> #define vpi vector<pair<lli,lli>> #define pi pair<lli,lli> #define msi multiset<lli> #define mspi multiset<pair<lli,lli>> #define mii map<lli,lli> #define mpi map<pair<lli,lli>,lli> #define si set<lli> #define spi set<pair<lli,lli>> #define qi queue<lli> #define pqi priority_queue<lli> #define pqimin priority_queue<lli,vi,greater<lli>> template<class T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; template<class T1, class T2> using ordered_map = tree<T1, T2, less<T1>, rb_tree_tag, tree_order_statistics_node_update>; class DSU { private: vi parent, size; public: lli comps; DSU(lli n) : parent(n), size(n, 1), comps(n){ rep(i, 0, n-1) parent[i] = i; } lli find(lli u) {return (u == parent[u]) ? u : (parent[u] = find(parent[u]));} bool unite(lli u, lli v){ u = find(u); v = find(v); if(u == v) return false; if(size[u] < size[v]) swap(u, v); parent[v] = u; size[u] += size[v]; comps--; return true; } bool connected(lli u, lli v) { u = find(u); v = find(v); return (u == v); } }; lli mod_pow(lli base, lli pwr, lli mod){ lli res = 1; while(pwr){ if(pwr&1) res = (res * base) % mod; base = (base * base) % mod; pwr >>= 1; } return res; } lli gcd(lli a, lli b){ while(b) { lli t = a % b; a = b; b = t; } return a; } lli calcdist(lli x1, lli x2){ return min(x1%x2, x2%x1); } void solve() { lli n; cin>>n; vpi p(n); rep(i,0,n-1)cin>>p[i].first, p[i].second = i; sort(all(p)); vvi edges; rep(i,0,n-1){ rep(j,i+1,n-1){ edges.pb({calcdist(p[i].first, p[j].first), p[i].second, p[j].second}); } } sort(all(edges)); DSU dsu(n); lli ans = 0; for(auto &edge : edges){ lli cost = edge[0]; lli u = edge[1]; lli v = edge[2]; if(!dsu.connected(u, v)){ dsu.unite(u, v); ans += cost; } } cout<<ans<<"\n"; } signed main() { int t=1; //cin>>t; while(t--) solve(); 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...