Submission #1155803

#TimeUsernameProblemLanguageResultExecution timeMemory
1155803DangKhoizzzzSirni (COCI17_sirni)C++17
140 / 140
1498 ms746656 KiB
#include <bits/stdc++.h> #define ll long long #define fi first #define se second #define pii pair <int , int> #define arr3 array <int , 3> /* + array limit ??? + special case ??? n = 1? + time limit ??? */ using namespace std; const int INF = 1e18 + 7; const int maxn = 1e7 + 7; struct DSU { vector <int> parent; vector <int> sz; void init(int n) { parent.assign(n+5 , 0); sz.assign(n+5 , 0); for(int i =1 ; i <= n; i++) { sz[i] = 1; parent[i] = i; } } int find_par(int u) { if(parent[u] == u) return u; return parent[u] = find_par(parent[u]); } void unionset(int u , int v) { u = find_par(u); v = find_par(v); if(u == v) return; if(sz[u] < sz[v]) swap(u , v); parent[v] = u; sz[u] += sz[v]; } bool connected(int u , int v) { return find_par(u) == find_par(v); } } dsu; int n , nxt[maxn]; vector <int> a; vector <pii> edge[maxn]; void solve() { cin >> n; for(int i = 1; i <= n; i++) { int x; cin >> x; a.push_back(x); } a.push_back(-1); sort(a.begin() , a.end()); a.erase(unique(a.begin() , a.end()) , a.end()); n = a.size() - 1; dsu.init(n); for(int i = 1; i <= n; i++) nxt[a[i]] = i; for(int i = a.back() - 1; i >= 1; i--) { if(nxt[i] == 0) nxt[i] = nxt[i+1]; } for(int i = 1; i < n; i++) { edge[a[i+1]%a[i]].push_back({i , i+1}); for(int j = a[i]*2; j <= a.back(); j += a[i]) { edge[a[nxt[j]]%a[i]].push_back({i , nxt[j]}); } } int ans = 0; for(int w = 0; w <= 1e7; w++) { for(pii tmp: edge[w]) { int u = tmp.fi; int v = tmp.se; if(!dsu.connected(u , v)) { dsu.unionset(u , v); ans += w; } } } cout << ans << '\n'; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); return 0; }

Compilation message (stderr)

sirni.cpp:16:22: warning: overflow in conversion from 'double' to 'int' changes value from '1.0e+18' to '2147483647' [-Woverflow]
   16 | const int INF = 1e18 + 7;
      |                 ~~~~~^~~
#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...