Submission #884726

#TimeUsernameProblemLanguageResultExecution timeMemory
884726406Reconstruction Project (JOI22_reconstruction)C++17
100 / 100
456 ms21172 KiB
#pragma GCC optimize ("O3,unroll-loops") #pragma GCC target("avx2") #include <bits/stdc++.h> #define FOR(i, a, b) for (int i = (a); i < (b); ++i) using namespace std; using ar4 = array<int, 4>; using ar3 = array<int, 3>; const int M = 1e5 + 5, N = 1002, Q = 1e6 + 5; const long long INF = 1e9 + 2; int n, m; ar4 E[M]; vector<ar4> bk; inline namespace dsu { short dpr[N]; void init() { memset(dpr, -1, sizeof dpr); } int gpr(int x) { return dpr[x] < 0 ? x : dpr[x] = gpr(dpr[x]); } bool merge(int u, int v) { u = gpr(u), v = gpr(v); if (u == v) return false; if (dpr[u] < dpr[v]) swap(u, v); dpr[v] += dpr[u]; dpr[u] = v; return true; } } int validate(vector<ar4> &E) { dsu::init(); for (int i = (int) E.size() - 1; ~i; --i) { auto [w, u, v, id] = E[i]; if (!dsu::merge(u, v)) { E.erase(E.begin() + i); return id; } } return -1; } int R[M], L[M]; signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; vector<ar3> V; FOR(i, 0, m) { cin >> E[i][1] >> E[i][2] >> E[i][0]; --E[i][1], --E[i][2]; if (E[i][1] > E[i][2]) swap(E[i][1], E[i][2]); V.push_back({E[i][0], E[i][0] * -2, 2}); } sort(E, E + m); FOR(i, 0, m) E[i][3] = i; FOR(i, 0, m) { auto &[w, u, v, id1] = E[i]; bk.insert(lower_bound(bk.begin(), bk.end(), E[i]), E[i]); int id = validate(bk); if (id == -1) L[i] = -INF; else { L[i] = (w + E[id][0] + 1) / 2; R[id] = (w + E[id][0] + 1) / 2; V.push_back({R[id], E[id][0], -1}); } V.push_back({L[i], E[i][0], -1}); } sort(V.rbegin(), V.rend()); long long q, S = 0, td = 0; cin >> q; FOR(i, 0, q) { int x; cin >> x; while (V.size() && V.back()[0] <= x) { auto a = V.back(); V.pop_back(); S += a[1]; td += a[2]; } cout << S + x * td << '\n'; } return 0; }
#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...