제출 #1186883

#제출 시각아이디문제언어결과실행 시간메모리
1186883SalihSahinReconstruction Project (JOI22_reconstruction)C++20
7 / 100
5093 ms13296 KiB
#include "bits/stdc++.h" #define pb push_back #define int long long using namespace std; const int N = 5e2 + 5; vector<int> par(N); int fnd(int a){ if(a == par[a]) return a; return par[a] = fnd(par[a]); } bool merge(int a, int b){ a = fnd(a); b = fnd(b); if(a == b) return false; par[b] = a; return true; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m; cin>>n>>m; vector<array<int, 3> > edges(m); // w, u, v for(int i = 0; i < m; i++){ cin>>edges[i][1]>>edges[i][2]>>edges[i][0]; } sort(edges.begin(), edges.end()); int l = -1; int q; cin>>q; while(q--){ int x; cin>>x; while(l < m-1 && edges[l+1][0] <= x) l++; int ans = 0; for(int i = 1; i <= n; i++){ par[i] = i; } int pl = l, pr = l+1; while(pl >= 0 && pr < m){ if(edges[pr][0] - x > x - edges[pl][0]){ if(merge(edges[pl][1], edges[pl][2])){ ans += x - edges[pl][0]; } pl--; } else{ if(merge(edges[pr][1], edges[pr][2])){ ans += edges[pr][0] - x; } pr++; } } while(pl >= 0){ if(merge(edges[pl][1], edges[pl][2])){ ans += x - edges[pl][0]; } pl--; } while(pr < m){ if(merge(edges[pr][1], edges[pr][2])){ ans += edges[pr][0] - x; } pr++; } 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...