Submission #307540

#TimeUsernameProblemLanguageResultExecution timeMemory
307540luciocfSirni (COCI17_sirni)C++14
42 / 140
5115 ms786436 KiB
#include <bits/stdc++.h> #define ff first #define ss second using namespace std; typedef long long ll; typedef pair<int, int> pii; const int maxn = 1e5+10; struct DSU { int pai[maxn], peso[maxn]; void init(int n) { for (int i = 1; i <= n; i++) pai[i] = i, peso[i] = 1; } int Find(int x) { if (pai[x] == x) return x; return pai[x] = Find(pai[x]); } void Join(int x, int y) { x = Find(x), y = Find(y); if (x == y) return; if (peso[x] < peso[y]) swap(x, y); pai[y] = x, peso[x] += peso[y]; } } dsu; int a[maxn]; int main(void) { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); sort(a+1, a+n+1); vector<pii> V; for (int i = 1; i <= n; i++) for (int j = a[i]; j <= a[n]; j += a[i]) V.push_back({j, i}); sort(V.begin(), V.end()); set<pair<int, pii>> st; for (int i = 2; i <= n; i++) st.insert({a[i]-a[i-1], {i-1, i}}); int ptr = (int)V.size()-1; for (int i = n; i >= 1; i--) { while (ptr >= 0 && V[ptr].ff > a[i]) ptr--; while (ptr >= 0 && V[ptr].ff > a[i-1]) { st.insert({a[i]-V[ptr].ff, {i, V[ptr].ss}}); ptr--; } } dsu.init(n); ll ans = 0; for (auto pp: st) { int u = pp.ss.ff, v = pp.ss.ss, w = pp.ff; if (dsu.Find(u) != dsu.Find(v)) { ans += 1ll*w; dsu.Join(u, v); } } printf("%lld\n", ans); }

Compilation message (stderr)

sirni.cpp: In function 'int main()':
sirni.cpp:45:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   45 |  scanf("%d", &n);
      |  ~~~~~^~~~~~~~~~
sirni.cpp:48:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   48 |   scanf("%d", &a[i]);
      |   ~~~~~^~~~~~~~~~~~~
#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...