Submission #1296428

#TimeUsernameProblemLanguageResultExecution timeMemory
1296428opituDžumbus (COCI19_dzumbus)C++20
0 / 110
183 ms628 KiB
#include <bits/stdc++.h> #define int long long using namespace std; struct edge { int u, v; }; signed main() { int n, m; cin >> n >> m; vector<int> a(1+n); for (int i = 1; i <= n; ++i) cin >> a[i]; vector<edge> el(m); for (auto &[u, v] : el) cin >> u >> v; vector<int> cvr(1+n, -1); vector<int> cst, cmc{0}; auto wgt = [&](edge x) { int wgt0 = (!~cvr[x.u])*a[x.u] + (!~cvr[x.v])*a[x.v]; return wgt0 ? wgt0 : 232323232323; }; for (int i = 0; i < m; ++i) { edge x = *min_element(el.begin(), el.end(), [&](const edge &y, const edge &z){ return wgt(y) < wgt(z); }); if (!~cvr[x.u] && !~cvr[x.v]) { int p = x.u, q = x.v; if (a[p] > a[q]) swap(p, q); cmc.push_back(cvr[p] = 0); cmc.push_back(cvr[q] = 2); cst.push_back(a[p]); cst.push_back(a[q]); } else if (!~cvr[x.u]) cmc.push_back(cvr[x.u] = 1), cst.push_back(a[x.u]); else if (!~cvr[x.v]) cmc.push_back(cvr[x.v] = 1), cst.push_back(a[x.v]); } int z = cst.size(); for (int i = 1; i < z; ++i) cst[i] += cst[i-1]; for (int i = 1; i < z; ++i) cmc[i] += cmc[i-1]; int q; cin >> q; while (q--) { int d; cin >> d; int x = upper_bound(cst.begin(), cst.end(), d) - cst.begin(); cout << cmc[x] << '\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...