Submission #1245822

#TimeUsernameProblemLanguageResultExecution timeMemory
1245822sheyerCities (BOI16_cities)C++20
0 / 100
46 ms3516 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; int n, k, m; vector<int> imp; vector<tuple<int, int, int>> edges; int par[N]; bool has_important[N]; int find(int u) { return par[u] == u ? u : par[u] = find(par[u]); } bool unite(int u, int v) { u = find(u); v = find(v); if (u == v) return false; par[v] = u; has_important[u] |= has_important[v]; return true; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> m; imp.resize(k); 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()); for (int i = 1; i <= n; ++i) { par[i] = i; has_important[i] = false; } for (int x : imp) has_important[x] = true; long long res = 0; int groups = k; for (auto [w, u, v] : edges) { int ru = find(u), rv = find(v); if (ru == rv) continue; if (has_important[ru] || has_important[rv]) { unite(ru, rv); res += w; groups--; if (groups == 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...