/* Author : Mychecksdead  */
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define MOD (1000000000+7)
#define MOD1 (998244353)
#define pb push_back
#define all(x) x.begin(), x.end()
#define en cout << '\n'
#define ff first
#define ss second
#define pii pair<int,int>
#define vi vector<int>
const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30;
int s[N], p[N];
struct Dsu{
  Dsu(int n){
    for(int j = 0; j <= n; ++j) s[j] = 1, p[j] = j;
  }
  int find(int v){
    if(p[v] == v) return v;
    return p[v] = find(p[v]);
  }
  bool merge(int u, int v){
    u = find(u);
    v = find(v);
    if(u != v){
      if(s[u] > s[v] )swap(u, v);
      p[u] = v;
      s[v] += s[u];
      return true;
    }
    return false;
  }
  bool merge(array<int, 3> e){
    int u = e[1], v = e[2];
    u = find(u);
    v = find(v);
    if(u != v){
      if(s[u] > s[v] )swap(u, v);
      p[u] = v;
      s[v] += s[u];
      return true;
    }
    return false;
  }
};
int n, m, q, maxL[N], maxR[N];
vector<array<int, 3>> E;
vi L[N], R[N];
void solve(){
  cin >> n >> m;
  E.resize(m);
  for(auto &[w, u, v]: E) cin >> u >> v >> w;
  sort(all(E), [&](const array<int, 3> &x, const array<int, 3> &y){
    return x[0] < y[0];
  });
  for(int i = 0; i < m; ++i){
    maxL[i] = maxR[i] = i;
  }
  L[0].pb(m);
  L[0].pb(0);
  L[0].pb(m + 1);
  for(int i = 1; i < m; ++i){
    Dsu d(n);
    d.merge(E[i]);
    L[i].pb(i);
    for(int j = int(L[i - 1].size())-2; j > 0; --j){
      if(d.merge(E[L[i - 1][j]])) L[i].pb(L[i - 1][j]);
    }
    L[i].pb(m);
    reverse(all(L[i]));
    L[i].pb(m+1);
  }
  R[m - 1].pb(m);
  R[m - 1].pb(m - 1);
  R[m - 1].pb(m + 1);
  for(int i = m - 2; i >= 0; --i){
    Dsu d(n);
    d.merge(E[i]);
    R[i].pb(m);
    R[i].pb(i);
    for(int j = 1; j + 1 < R[i + 1].size(); ++j){
      if(d.merge(E[R[i + 1][j]])) R[i].pb(R[i + 1][j]);
    }
    R[i].pb(m+1);
  }
  for(int i = 0; i < m; ++i){
    for(int x: L[i]) if(x<m) maxR[x] = max(maxR[x], i);
    for(int x: R[i]) if(x<m) maxL[x] = min(maxL[x], i);
  }
  E.pb({-MOD, 0, 0});
  E.pb({MOD+MOD, 0, 0});
  cin >> q;
  for(int i = 1; i <= q; ++i){
    ll x; cin >> x;
    int pos = upper_bound(all(E), array<int, 3>{(int)x, -1, -1}) - E.begin();
    --pos;
    if(pos == -1){
      ll ans = 0;
      for(int j = 1; j + 1 < R[pos + 1].size(); ++j) ans += R[pos + 1][j] - x;
      cout << ans << '\n';
      continue;
    }
    if(pos + 1 == m){
      ll ans = 0;
      for(int j = 1; j + 1 < L[pos].size(); ++j) ans += x - L[pos][j];
      cout << ans << '\n';
      continue;
    }
    int l = int(L[pos].size()) - 2;
    int r = 1;
    int sz = 1;
    ll ans = 0;
    while(sz < n){
      // assert(l >= 0 && r < R[pos + 1].size());
      if(!(l >= 0 && r < R[pos + 1].size())){
        cout << l << ' ' << r << ' ' << R[pos + 1].size() << '\n';
        cout << x - E[L[pos][l+1]][0] << ' ' <<  E[R[pos + 1][r]][0] - x << ' ';
        return;
      }
      if(x - E[L[pos][l]][0] <= E[R[pos + 1][r]][0] - x){
        if(maxR[L[pos][l]] >= R[pos + 1][r - 1]){
          ans += abs(E[L[pos][l]][0] - x);
          ++sz;
        }
        --l;
      }else{
        if(maxL[R[pos + 1][r]] <= L[pos][l + 1]){
          ans += abs(E[R[pos + 1][r]][0] - x);
          ++sz;
        }
        ++r;
      }
    }
    cout << ans << '\n';
  }
}
int main(){
  cin.tie(0); ios::sync_with_stdio(0);
  int tt = 1, aa;
  // freopen("in.txt", "r", stdin);
  // freopen("out.txt", "w", stdout);
  while(tt--){
    solve();
    en;
  }
  cerr<<"time taken : "<<(float)clock()/CLOCKS_PER_SEC<<" seconds\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... |