Submission #1127538

#TimeUsernameProblemLanguageResultExecution timeMemory
1127538lamReconstruction Project (JOI22_reconstruction)C++20
7 / 100
5094 ms14024 KiB
#include <bits/stdc++.h> using namespace std; #define int long long vector<array<int, 3>> edge; int x; bool cmp(array<int, 3> a, array<int, 3> b){ return abs(x - a[0]) < abs(x - b[0]); } struct DSU{ vector<int> p; void init(int n){ p.assign(n + 2, 0); for(int i = 1; i <= n; i++) p[i] = i; } int find(int u){ if(p[u] == u) return u; else return p[u] = find(p[u]); } bool merge(int u, int v){ u = find(u); v = find(v); if(u == v) return false; else{ p[u] = v; return true; } } } dsu; void solve(){ int n, m; cin >> n >> m; bool sub3 = true; for(int i = 1; i <= m; i++){ int a, b, w; cin >> a >> b >> w; edge.push_back({w, b, a}); if(b != a + 1) sub3 = false; } if(sub3){ vector<vector<int>> v(n, vector<int>(0)); for(int i = 0; i < m; i++) v[edge[i][2]].push_back(edge[i][0]); for(int i = 1; i <= n - 1; i++) sort(v[i].begin(), v[i].end()); int q; cin >> q; while(q--){ cin >> x; int ans = 0; for(int i = 1; i <= n - 1; i++){ int c = 2e9; int pos = lower_bound(v[i].begin(), v[i].end(), x) - v[i].begin(); if(pos < v[i].size()) c = min(c, v[i][pos] - x); if(pos != 0) c = min(c, x - v[i][pos - 1]); ans += c; } cout << ans << "\n"; } return; } int q; cin >> q; while(q--){ cin >> x; sort(edge.begin(), edge.end(), cmp); dsu.init(n); int ans = 0; for(int i = 0; i < m; i++){ int u = edge[i][1], v = edge[i][2]; if(dsu.merge(u, v)){ ans += abs(x - edge[i][0]); } } cout << ans << "\n"; } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); // freopen("RAILROAD.INP", "r", stdin); // freopen("RAILROAD.OUT", "w", stdout); solve(); }
#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...