제출 #1144112

#제출 시각아이디문제언어결과실행 시간메모리
1144112tleSquaredSirni (COCI17_sirni)C++20
42 / 140
901 ms851968 KiB
#include <iostream> #include <vector> #include <algorithm> #define ll long long using namespace std; vector<int> parent, ranks; void make_set(int v) { parent[v] = v; ranks[v] = 0; } int find_set(int v) { if (v == parent[v]) return v; return parent[v] = find_set(parent[v]); } void union_sets(int a, int b) { a = find_set(a); b = find_set(b); if (a != b) { if (ranks[a] < ranks[b]) swap(a, b); parent[b] = a; if (ranks[a] == ranks[b]) ranks[a]++; } } int main() { int n; cin >> n; vector<ll> a(n); for (int i = 0; i < n; i++) cin >> a[i]; vector<pair<ll, pair<ll, ll> > > edges; for (int i = 0; i < n; i++) { for (int j = i+1; j < n; j++) { edges.push_back(make_pair(min(a[i]%a[j], a[j]%a[i]), make_pair(i, j))); } } int cost = 0; parent.resize(n); ranks.resize(n); for (int i = 0; i < n; i++) make_set(i); sort(edges.begin(), edges.end()); for (pair<ll, pair<ll, ll> > e : edges) { if (find_set(e.second.first) != find_set(e.second.second)) { cost += e.first; // result.push_back(e); union_sets(e.second.first, e.second.second); } } cout << cost << endl; 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...