Submission #1127536

#TimeUsernameProblemLanguageResultExecution timeMemory
1127536lamReconstruction Project (JOI22_reconstruction)C++20
14 / 100
1333 ms19460 KiB
#include <iostream> #include <bits/stdc++.h> #define ll long long using namespace std; const ll INF = 4e18; struct edge{ ll u, v, w; }; struct DSU{ vector<int> pa; vector<int> sz; int n; DSU(int n) : n(n){ pa.resize(n+1); sz.resize(n+1, 1); iota(pa.begin(), pa.end(), 0); } int find(int v){ if(v == pa[v]) return v; int res = find(pa[v]); pa[v] = res; return res; } void merge(int u, int v){ u = find(u); v = find(v); if(sz[u] < sz[v]) swap(u, v); pa[v] = u; sz[u] += sz[v]; } }; void sub2(int n, int m, int Q, vector<edge> e){ for(int it = 1; it <= Q; it++){ ll x; cin >> x; vector<edge> ed = e; for(int i = 0; i < m; i++){ ed[i].w = abs(x-e[i].w); } sort(ed.begin(), ed.end(), [&](edge a, edge b){return a.w < b.w;}); ll ans = 0; DSU dsu(n+1); for(auto it : ed){ ll u = it.u, v = it.v, w = it.w; if(dsu.find(u) == dsu.find(v)) continue; dsu.merge(u, v); ans += w; } cout << ans << "\n"; } } void sub3(int n, int m, int Q, vector<edge> e){ vector<vector<ll>> s(n+1); for(auto it : e){ s[it.u].push_back(it.w); } for(int i = 1; i < n; i++){ sort(s[i].begin(), s[i].end()); } vector<int> pt(n+1, 0); for(int it = 1; it <= Q; it++){ ll x; cin >> x; ll ans = 0; for(int i = 1; i < n; i++){ while(pt[i] < (int)s[i].size() && s[i][pt[i]] < x){ pt[i]++; } ll mn = INF; if(pt[i] < (int)s[i].size()){ mn = s[i][pt[i]]-x; } if(pt[i]-1 >= 0){ mn = min(mn, x-s[i][pt[i]-1]); } ans += mn; } cout << ans << "\n"; } } void solve(){ int n, m, Q; cin >> n >> m; vector<edge> e(m); bool issub3 = true; for(int i = 1; i <= m; i++){ ll u, v, w; cin >> u >> v >> w; if(v != u+1) issub3 = false; e[i-1] = {u, v, w}; } cin >> Q; if(Q <= 10){ sub2(n, m, Q, e); return; } if(issub3){ sub3(n, m, Q, e); return; } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); // freopen("RAILROAD.inp", "r", stdin); // freopen("RAILROAD.out", "w", stdout); solve(); 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...