#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |