#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn = 2*1e5+5, INF = 4e18+9;
struct DSU{
int n;
vector<int> pa, sz;
DSU(int n) : n(n){
pa.resize(n+1);
sz.resize(n+1, 1);
for(int i = 0; i <= n; i++){
pa[i] = i;
}
};
int find(int x){
while(x != pa[x]){
x = pa[x] = pa[pa[x]];
}
return x;
}
bool same(int x, int y){
return find(x) == find(y);
}
bool merge(int x, int y){
x = find(x);
y = find(y);
if(x == y) return false;
if(sz[x] < sz[y]) swap(x, y);
pa[y] = x;
sz[x] += sz[y];
return true;
}
int size(int x){
return sz[find(x)];
}
};
struct edge{
int u, v, w;
};
void solve(){
int n, m;
cin >> n >> m;
vector<edge> e(m+1);
for(int i = 1; i <= m; i++){
int u, v, w;
cin >> u >> v >> w;
e[i] = {u, v, w};
}
sort(e.begin()+1, e.end(), [&](edge a, edge b){return a.w < b.w;});
vector<vector<int>> lt(m+1);
for(int i = 1; i <= m; i++){
DSU dsu(n+1);
dsu.merge(e[i].u, e[i].v);
lt[i].push_back(i);
for(int it : lt[i-1]){
if(dsu.merge(e[it].u, e[it].v)){
lt[i].push_back(it);
}
}
}
vector<vector<int>> rt(m+1);
for(int i = m; i >= 1; i--){
DSU dsu(n+1);
dsu.merge(e[i].u, e[i].v);
rt[i-1].push_back(i);
for(int it : rt[i]){
if(dsu.merge(e[it].u, e[it].v)){
rt[i-1].push_back(it);
}
}
}
int Q;
cin >> Q;
int p = 0;
for(int i = 1; i <= Q; i++){
int x;
cin >> x;
while(p+1 <= m && e[p+1].w <= x){
p++;
}
int p1 = 0, p2 = 0;
DSU dsu(n+1);
ll ans = 0;
vector<int> l = lt[p], r = rt[p];
for(int i = 1; i <= (int)l.size()+(int)r.size(); i++){
if(p2 == (int)r.size() || (p1 < (int)l.size() && x - e[l[p1]].w <= e[r[p2]].w - x)){
int ul = e[l[p1]].u, vl = e[l[p1]].v, wl = x - e[l[p1]].w;
if(dsu.merge(ul, vl)){
ans += wl;
}
p1++;
}else{
int ur = e[r[p2]].u, vr = e[r[p2]].v, wr = e[r[p2]].w - x;
if(dsu.merge(ur, vr)){
ans += wr;
}
p2++;
}
}
cout << ans << "\n";
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
solve();
}
# | 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... |