#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
using ll = long long;
using ld = long double;
using pii = pair<int, int>;
#define F first
#define S second
#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()
const ld PI = 3.1415926535;
const ld eps = 1e-9;
const int N = 2e5 + 5;
const int M = 7e6 + 1;
ll mod = 1e9+7;
const int infi = 1e9 + 5;
const ll infl = 1e16;
const int P = 31;
int mult(int a, int b) {
     return a * 1LL * b % mod; }
int sum(int a, int b) {
    if(a + b >= mod)
        return a + b - mod;
    if(a + b < 0)
        return a + b + mod;
    return a + b;
}
ll binpow(ll a, ll n) {
    if (n == 0) return 1;
    if (n % 2 == 1) {
        return binpow(a, n - 1) * a % (mod);
    } else {
        ll b = binpow(a, n / 2);
        return b * b % (mod);
    }
}
int p[N], sz[N];
pair<int, pii> edg[N];
vector<pii> g[N];
pair<int, pii> vec[N];
int n, m;
void clear(){
    for(int i = 1; i <= n; i++)
        p[i] = i, sz[i] = 1;
}
int getp(int v){
    if(v == p[v])
        return v;
    return p[v] = getp(p[v]);
}
void uni(int a, int b){
    a = getp(a);
    b = getp(b);
    if(a == b)
        return;
    if(sz[a] > sz[b])
        swap(a, b);
    p[a] = b;
    sz[b] += sz[a];
}
pair<int, pii> dfs(int v, int nd, int p, int w){
    if(v == nd){
        return {w, {p, v}};
    }
    int mx = -infi;
    pii ans = {-1, -1};
    for(auto to : g[v]){
        int u = to.F, w = to.S;
        if(u == p) continue;
        auto ret = dfs(u, nd, v, w);
        if(ret.F == -infi)
            continue;
        if(mx < ret.F){
            mx = ret.F;
            ans = ret.S;
        }
    }
    if(mx != -infi){
        if(mx < w){
            mx = w;
            ans = {p, v};
        }
    }
    return {mx, ans};
}
void solve() {
    cin >> n >> m;
    for(int i = 1; i <= m; i++){
        int a, b, w;
        cin >> a >> b >> w;
        edg[i] = {w, {a, b}};
    }
    for(int i = 1; i <= n; i++)
        p[i] = i, sz[i] = 1;
    sort(edg + 1, edg + m + 1);
    vector<pair<int, pii>> rt = {};
    for(int i = m; i >= 1; i--){
        auto ret = dfs(edg[i].S.F, edg[i].S.S, -1, -infi);
        if(ret.F != -infi){
            int ps = 0;
            for(int j = 0; j < sz(g[ret.S.F]); j++){
                if(g[ret.S.F][j].F == ret.S.S)
                    ps = j;
            }
            g[ret.S.F].erase(g[ret.S.F].begin() + ps);
            for(int j = 0; j < sz(g[ret.S.S]); j++){
                if(g[ret.S.S][j].F == ret.S.F)
                    ps = j;
            }
            g[ret.S.S].erase(g[ret.S.S].begin() + ps);
        }
        g[edg[i].S.F].push_back({edg[i].S.S, edg[i].F});
        g[edg[i].S.S].push_back({edg[i].S.F, edg[i].F});
        vec[i] = ret;
        int ps = -1;
        for(int j = 0; j < sz(rt); j++){
            auto e = rt[j];
            if((e.S.F == ret.S.F && e.S.S == ret.S.S && e.F == ret.F) ||
            (e.S.F == ret.S.S && e.S.S == ret.S.F && e.F == ret.F)) ps = j;
        }
        if(ps != -1)
            rt.erase(rt.begin() + ps);
        rt.insert(rt.begin(), edg[i]);
    }
    for(int i = 1; i <= n; i++)
        g[i].clear();
    int cur = 0;
    vector<pair<int, pii>> lf = {};
    int q;
    cin >> q;
    while(q--){
        int x;
        cin >> x;
        while(cur < m && edg[cur + 1].F <= x){
            cur++;
            int ha = -1;
            for(int j = 0; j < sz(rt); j++){
                auto e = rt[j];
                if((e.S.F == edg[cur].S.F && e.S.S == edg[cur].S.S && e.F == edg[cur].F) ||
                    (e.S.F == edg[cur].S.S && e.S.S == edg[cur].S.F && e.F == edg[cur].F)) ha = j;
            }
            if(ha != -1)
                rt.erase(rt.begin() + ha);
            if(vec[cur].F != -infi){
                auto it = lower_bound(all(rt), vec[cur]);
                rt.insert(it, vec[cur]);
            }
            int i = cur;
            auto ret = dfs(edg[i].S.F, edg[i].S.S, -1, -infi);
            if(ret.F != -infi){
                int ps = 0;
                for(int j = 0; j < sz(g[ret.S.F]); j++){
                    if(g[ret.S.F][j].F == ret.S.S)
                        ps = j;
                }
                g[ret.S.F].erase(g[ret.S.F].begin() + ps);
                for(int j = 0; j < sz(g[ret.S.S]); j++){
                    if(g[ret.S.S][j].F == ret.S.F)
                        ps = j;
                }
                g[ret.S.S].erase(g[ret.S.S].begin() + ps);
            }
            g[edg[i].S.F].push_back({edg[i].S.S, -edg[i].F});
            g[edg[i].S.S].push_back({edg[i].S.F, -edg[i].F});
            int ps = -1;
            for(int j = 0; j < sz(lf); j++){
                auto e = lf[j];
                if((e.S.F == ret.S.F && e.S.S == ret.S.S && e.F == -ret.F) ||
                (e.S.F == ret.S.S && e.S.S == ret.S.F && e.F == -ret.F)) 
                    ps = j;
            }
            if(ps != -1)
                lf.erase(ps + lf.begin());
            lf.insert(lf.begin(), edg[i]);
        }
        
        ll ans = 0;
        auto itl = lf.begin(), itr = rt.begin();
        while(itl != lf.end() || itr != rt.end()){
            pair<int, pii> ha;
            if(itl == lf.end()){
                ha = *itr;
                itr++;
            }else if(itr == rt.end()){
                ha = *itl;
                itl++;
            }else if((x - itl->F) < (itr->F - x)){
                ha = *itl;
                itl++;
            }else{
                ha = *itr;
                itr++;
            }
            if(getp(ha.S.F) == getp(ha.S.S)) continue;
            uni(ha.S.S, ha.S.F);
            ans += abs((ll)x - (ll)ha.first);
        }
        clear();
        cout << ans << '\n';
    }
}
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    //cin >> t;
    for(int i = 1; i <= t; i ++){
        solve();
    }
    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... |