제출 #914998

#제출 시각아이디문제언어결과실행 시간메모리
914998Em1LSirni (COCI17_sirni)C++17
98 / 140
2043 ms786432 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; using tiiii = tuple<int, int, ll, ll>; class DSU { private: int n; vector < int > parent, scale; int GetRoot(int v) { return parent[v] = v == parent[v] ? v : GetRoot(parent[v]); } public: DSU(int n) { this->n = n; parent.resize(n); iota(parent.begin(), parent.end(), 0); scale.resize(n, 1); } bool Unite(int v, int u) { v = GetRoot(v), u = GetRoot(u); if (v == u) return false; if (scale[v] < scale[u]) swap(v, u); parent[u] = v; scale[v] += scale[u]; return true; } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); const int P = 1e+7; int n; cin >> n; vector < int > p(n); for (int i = 0; i < n; i++) cin >> p[i]; sort(p.begin(), p.end()); p.erase(unique(p.begin(), p.end()), p.end()); n = p.size(); vector < int > nextGreater(P + 1, -1); for (int i = 0; i < n; i++) nextGreater[p[i]] = i; for (int i = P; i >= 1; i--) if (nextGreater[i] == -1) nextGreater[i] = nextGreater[i + 1]; vector < vector < pii > > edge(P + 1); for (int i = 0; i < n; i++) { if (i < n - 1) edge[p[i + 1] % p[i]].push_back({ i, i + 1 }); for (int x = 2 * p[i]; x <= P; x += p[i]) { int j = nextGreater[x]; if (j != -1) edge[p[j] % p[i]].push_back({ i, j }); } } ll ans = 0; DSU dsu(n); for (int c = 0; c <= P; c++) for (auto [i, j] : edge[c]) if (dsu.Unite(i, j)) ans += c; 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...