Submission #1273536

#TimeUsernameProblemLanguageResultExecution timeMemory
1273536vk3601hSirni (COCI17_sirni)C++20
140 / 140
1281 ms746516 KiB
#include <bits/stdc++.h> using namespace std; class DisjointSet{ private: vector<int> parents; vector<int> sizes; public: DisjointSet(int size) : parents(size), sizes(size, 1) { for (int i = 0; i < size; i++) parents[i] = i; } int find(int x) {return parents[x] == x ? x : parents[x] = find(parents[x]);} bool unite(pair<int, int> edge){ int x_root = find(edge.first); int y_root = find(edge.second); if (x_root == y_root) return false; if (sizes[x_root] < sizes[y_root]) swap(x_root, y_root); parents[y_root] = x_root; sizes[x_root] += sizes[y_root]; return true; } }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int card_num; cin >> card_num; vector<int> card(card_num); for (int i = 0; i < card_num; i++) cin >> card[i]; sort(card.begin(), card.end()); card.erase(unique(card.begin(), card.end()), card.end()); int largest = card.back(); vector<int> next_largest(largest + 1, -1); for (int i = 0; i < (int)card.size(); i++) next_largest[card[i]] = i; for (int i = largest - 1; i >= 0; i--) if (next_largest[i] == -1) next_largest[i] = next_largest[i + 1]; vector<vector<pair<int, int>>> good_links(largest + 1); for (int i = 0; i < (int)card.size() - 1; i++){ good_links[card[i + 1] % card[i]].push_back({i, i + 1}); for (int at = 2 * card[i]; at <= largest; at += card[i]){ int good_mod = next_largest[at]; good_links[card[good_mod] % card[i]].push_back({i, good_mod}); } } long long ans = 0; DisjointSet dsu((int)card.size()); for (int cost = 0; cost <= largest; cost++){ for (const pair<int, int> &link : good_links[cost]){ if (dsu.unite(link)){ ans += cost; } } } cout << ans; 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...