제출 #1245823

#제출 시각아이디문제언어결과실행 시간메모리
1245823sheyerCities (BOI16_cities)C++20
0 / 100
45 ms3516 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]; bool has_imp[N]; int find(int u) { return par[u] == u ? u : par[u] = find(par[u]); } void unite(int u, int v) { u = find(u), v = find(v); if (u == v) return; par[v] = u; has_imp[u] |= has_imp[v]; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k >> m; for (int i = 0; i < k; ++i) { cin >> imp[i]; has_imp[imp[i]] = true; } for (int i = 0; i < m; ++i) { int u, v, w; cin >> u >> v >> w; edges.emplace_back(w, u, v); } iota(par, par + N, 0); sort(edges.begin(), edges.end()); long long res = 0; int important_groups = k; for (auto [w, u, v] : edges) { int ru = find(u), rv = find(v); if (ru == rv) continue; bool imp_u = has_imp[ru]; bool imp_v = has_imp[rv]; unite(ru, rv); if (imp_u && imp_v) important_groups--; else if (imp_u || imp_v) important_groups--; res += w; if (important_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...