Submission #1186128

#TimeUsernameProblemLanguageResultExecution timeMemory
1186128raspyNile (IOI24_nile)C++20
32 / 100
58 ms11960 KiB
#include "nile.h" #include <algorithm> #include <numeric> #include <iostream> using namespace std; typedef long long ll; const ll inf = 1e9+10; vector<ll> par; vector<ll> mn; vector<ll> sz; vector<ll> sm; ll mnz(int x) { return par[x] = (x==par[x]?x:mnz(par[x])); } vector<long long> calculate_costs(vector<int> w, vector<int> a, vector<int> b, vector<int> e) { int n = a.size(); int q = e.size(); par = vector<ll>(n, 0); mn = vector<ll>(n, inf); sz = vector<ll>(n, 1); vector<ll> ixsw(n); iota(ixsw.begin(), ixsw.end(), 0); sort(ixsw.begin(), ixsw.end(), [&w](int i, int j) { return w[i] < w[j]; }); iota(par.begin(), par.end(), 0); vector<ll> rez(q); vector<pair<ll, ll>> qr; for (int i = 0; i < q; i++) qr.push_back({e[i], i}); sort(qr.begin(), qr.end()); vector<pair<ll, ll>> edges; for (int i = 0; i+1 < n; i++) edges.push_back({ixsw[i], ixsw[i+1]}); sort(edges.begin(), edges.end(), [&w](pair<ll, ll> i1, pair<ll, ll> i2) { int r1 = abs(w[i1.first]-w[i1.second]); int r2 = abs(w[i2.first]-w[i2.second]); return r1 < r2; }); int j = 0; int tre = 0; for (int i = 0; i < n; i++){ mn[ixsw[i]] = a[ixsw[i]]-b[ixsw[i]]; tre += a[ixsw[i]]; } for (int i = 0; i < q; i++) { auto [ds, ix] = qr[i]; while (j<edges.size()) { auto [i1, i2] = edges[j]; int r = abs(w[i1]-w[i2]); if (r > ds) break; int x = mnz(i1); int y = mnz(i2); if (x==y) continue; if (sz[y]%2) tre-=mn[y]; if (sz[x]%2) tre-=mn[x]; par[y] = x; sz[x] += sz[y]; mn[x] = min(mn[x], mn[y]); if (sz[x]%2) tre+=mn[x]; j++; } rez[ix] = tre; } return rez; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...