Submission #1245820

#TimeUsernameProblemLanguageResultExecution timeMemory
1245820sheyerCities (BOI16_cities)C++20
0 / 100
50 ms3620 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; int n, k, m; int imp[5]; vector<tuple<int, int, int>> edges; int par[N]; int find(int u) { return par[u] == u ? u : par[u] = find(par[u]); } bool merge(int u, int v) { u = find(u); v = find(v); if (u == v) return false; par[u] = v; return true; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> m; for (int i = 0; i < k; ++i) cin >> imp[i]; for (int i = 0; i < m; ++i) { int u, v, w; cin >> u >> v >> w; edges.emplace_back(w, u, v); } sort(edges.begin(), edges.end()); vector<int> root(n + 1); for (int i = 1; i <= n; ++i) par[i] = i; long long res = 0; int cnt = 0; for (auto [w, u, v] : edges) { if (merge(u, v)) { res += w; ++cnt; if (cnt == n - 1) break; } } // tìm tập các nút gốc chứa điểm quan trọng set<int> imp_roots; for (int i = 0; i < k; ++i) imp_roots.insert(find(imp[i])); // nếu tất cả điểm quan trọng chung 1 component if (imp_roots.size() == 1) cout << res << '\n'; else { // cần tìm MST chỉ để các điểm quan trọng liên thông vector<int> mark(n + 1, 0); for (int i = 1; i <= n; ++i) par[i] = i; for (int i = 0; i < k; ++i) mark[imp[i]] = 1; sort(edges.begin(), edges.end()); res = 0; int components = k; for (auto [w, u, v] : edges) { int pu = find(u), pv = find(v); if (pu == pv) continue; if (mark[pu] && mark[pv]) { merge(pu, pv); mark[find(pu)] = 1; res += w; --components; } else if (mark[pu]) { merge(pu, pv); mark[find(pu)] = 1; res += w; --components; } else if (mark[pv]) { merge(pu, pv); mark[find(pu)] = 1; res += w; --components; } if (components == 1) break; } cout << res << '\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...