Submission #776892

#TimeUsernameProblemLanguageResultExecution timeMemory
776892eltu0815Reconstruction Project (JOI22_reconstruction)C++14
7 / 100
5069 ms18964 KiB
#include <bits/stdc++.h> #define MAX 500005 #define MOD (ll)(1e9+7) #define INF (ll)(1e18) using namespace std; typedef long long ll; typedef pair<ll, ll> pll; typedef pair<int, int> pii; int n, m, q; int parent[505]; vector<pair<int, pii> > edge; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; for(int i = 1; i <= m; ++i) { int a, b, w; cin >> a >> b >> w; edge.push_back({w, {a, b}}); } sort(edge.begin(), edge.end()); auto getParent = [&](auto&& self, int node) -> int { if(parent[node] == node) return node; else return parent[node] = self(self, parent[node]); }; auto unionParent = [&](int u, int v) -> void { u = getParent(getParent, u), v = getParent(getParent, v); if(u > v) swap(u, v); parent[v] = u; }; cin >> q; while(q--) { int x; cin >> x; for(int i = 1; i <= n; ++i) parent[i] = i; ll ans = 0; pair<int, pii> pp = {x, {0, 0}}; int q = lower_bound(edge.begin(), edge.end(), pp) - edge.begin(), p = q - 1; while(0 <= p || q < m) { ll i; if(p == -1) i = q++; else if(q == m) i = p--; else if(abs(edge[p].first - x) < abs(edge[q].first - x)) i = p--; else i = q++; if(getParent(getParent, edge[i].second.first) != getParent(getParent, edge[i].second.second)) { ans += 1ll * abs(edge[i].first - x); unionParent(edge[i].second.first, edge[i].second.second); } } cout << ans << '\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...