This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
 
#pragma GCC optimize("Ofast")
 
using namespace std;
 
#define pb push_back
#define all(v) v.begin(),v.end()
#define sz(s) (int)s.size()
#define ppb pop_back
#define ll long long
#define pii pair<int,int>
#define F first
#define S second
#define lb lower_bound
// #define int ll
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
const int MAX=2e5+10;
 
int n,m;
vector<pair<int,pii>> e;
 
struct DSU{
    int f[MAX];
 
    void init(int n){
        for(int i=1;i<=n;i++)f[i]=i;
    }
 
    int get(int v){
        return (f[v]==v?v:f[v]=get(f[v]));
    }
 
    void unite(int a,int b){
        a=get(a);
        b=get(b);
        if(rng()%2)swap(a,b);
        f[a]=b;
    }
}D;
 
int make(int a,pii x){
    if(D.get(x.F)!=D.get(x.S)){
        D.unite(x.F,x.S);
        return a;
    }
    return 0;
}
 
ll solve(int d){
    int r=lb(all(e),make_pair(d,make_pair(0,0)))-e.begin();
    int l=r-1;
    D.init(n);
    ll ans=0;
    int cnt=0;
    for(int i=1;i<=m,cnt<n-1;i++){
        if((r<sz(e)&&l>=0&&e[r].F-d<=d-e[l].F)||l<0){
            if(D.get(e[r].S.F)!=D.get(e[r].S.S)){
                ans+=e[r].F-d;
                D.unite(e[r].S.F,e[r].S.S);
                cnt++;
            }
            r++;
        }
        else{
            if(D.get(e[l].S.F)!=D.get(e[l].S.S)){
                ans+=d-e[l].F;
                D.unite(e[l].S.F,e[l].S.S);
                cnt++;
            }
            l--;
        }
    }
    return ans;
}
 
void solve(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        e.pb({c,{a,b}});
    }
    sort(all(e));
    // cout<<e[0].F<<" "<<e[1].F<<"\n";
    int q;
    cin>>q;
    while(q--){
        int d;
        cin>>d;
        cout<<solve(d)<<"\n";
    }
}
 
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    // cin>>t;
    while(t--)solve();
}
Compilation message (stderr)
reconstruction.cpp: In function 'long long int solve(int)':
reconstruction.cpp:58:18: warning: left operand of comma operator has no effect [-Wunused-value]
   58 |     for(int i=1;i<=m,cnt<n-1;i++){
      |                 ~^~~| # | 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... |