Submission #674460

#TimeUsernameProblemLanguageResultExecution timeMemory
674460someoneReconstruction Project (JOI22_reconstruction)C++14
42 / 100
5038 ms96240 KiB
#include <bits/stdc++.h> #define int long long using namespace std; struct Arc { int a, b, pds; bool operator <(const Arc& other) const { return pds < other.pds; } }; struct Req { int q, i, ans = 0; }; const int N = 1e6 + 42, M = 542, INF = 1e18 + 42, MOD = 1e9 + 7; Req req[N]; int n, m, q, par[M]; int F(int i) { if(par[i] < 0) return i; return par[i] = F(par[i]); } bool U(int a, int b) { a = F(a), b = F(b); if(a == b) return false; if(-par[a] < -par[b]) swap(a, b); par[a] += par[b]; par[b] = a; return true; } void dpr(int deb, int fin, deque<Arc> arc) { if(deb == fin) return; int mid = (deb + fin) >> 1; deque<Arc> l, r; for(Arc a : arc) if(a.pds < req[mid].q) l.push_back(a); else r.push_back(a); int nb = n-1, sz = (int)r.size(), id[] = {((int)l.size())-1, 0}; for(int i = 0; i < n; i++) par[i] = -1; while(nb) { if(id[1] < sz && (id[0] == -1 || req[mid].q - l[id[0]].pds > r[id[1]].pds - req[mid].q)) { if(U(r[id[1]].a, r[id[1]].b)) { nb--; l.push_back(r[id[1]]); req[mid].ans += r[id[1]].pds - req[mid].q; } id[1]++; } else { if(U(l[id[0]].a, l[id[0]].b)) { nb--; sz++, id[1]++; r.push_front(l[id[0]]); req[mid].ans += req[mid].q - l[id[0]].pds; } id[0]--; } } if(fin - deb == 1) return; dpr(deb, mid, l); dpr(mid+1, fin, r); } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; deque<Arc> arc; for(int i = 0; i < m; i++) { int a, b, pds; cin >> a >> b >> pds; a--, b--; arc.push_back({a, b, pds}); } cin >> q; for(int i = 0; i < q; i++) { cin >> req[i].q; req[i].i = i; } sort(req, req + q, [](Req a, Req b) { return a.q < b.q; }); sort(arc.begin(), arc.end()); dpr(0, q, arc); sort(req, req + q, [](Req a, Req b) { return a.i < b.i; }); for(int i = 0; i < q; i++) cout << req[i].ans << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...