Submission #1188862

#TimeUsernameProblemLanguageResultExecution timeMemory
1188862zwezdinvSecurity Guard (JOI23_guard)C++20
50 / 100
147 ms10488 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; struct DSU { vector<int> p; DSU() = default; DSU(int n) : p(n) { iota(p.begin(), p.end(), 0); } int get(int u) { while (u != p[u]) u = p[u] = p[p[u]]; return u; } bool unite(int u, int v) { u = get(u), v = get(v); if (u == v) return false; p[v] = u; return true; } }; signed main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m, q; cin >> n >> m >> q; vector<ll> s(n); for (auto& i : s) cin >> i; vector<tuple<ll, int, int>> edges; ll base = *max_element(s.begin(), s.end()) - accumulate(s.begin(), s.end(), 0ll); for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; --u, --v; edges.emplace_back(s[u] + s[v], u, v); } sort(edges.begin(), edges.end()); ll mst = 0; DSU dsu(n); for (auto [w, u, v] : edges) { mst += w * dsu.unite(u, v); } cout << mst + base; }
#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...