Submission #821624

#TimeUsernameProblemLanguageResultExecution timeMemory
821624rnl42Reconstruction Project (JOI22_reconstruction)C++14
7 / 100
5073 ms7680 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

#ifdef DEBUG
#define dbg(x) cerr << #x << " = " << x << endl
#define dbgln() cerr << "\n"
#else
#define dbg(x) void(0)
#define dbgln() void(0)
#endif

struct Edge {
    int u, v, w;
    int val;
    bool operator<(const Edge& other) const {
        return val < other.val;
    }
};

struct UF {
    vector<int> uf;
    UF(int N) {
        uf.resize(N);
        iota(uf.begin(), uf.end(), 0);
    }
    int root(int u) {
        return u == uf[u] ? u : uf[u] = root(uf[u]);
    }
    void merge(int u, int v) {
        uf[root(u)] = root(v);
    }
};

int N, M, Q;
vector<Edge> edges;

signed main() {
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> N >> M;
    edges.resize(M);
    for (int i = 0; i < M; i++) {
        cin >> edges[i].u >> edges[i].v >> edges[i].w, edges[i].u--, edges[i].v--;
    }
    cin >> Q;
    int x;
    for (int i = 0; i < Q; i++) {
        cin >> x;
        for (int j = 0; j < M; j++) {
            edges[j].val = abs(edges[j].w-x);
        }
        sort(edges.begin(), edges.end());
        UF uf(N);
        int ans = 0;
        for (auto& e : edges) {
            if (uf.root(e.u) != uf.root(e.v)) {
                ans += e.val;
                uf.merge(e.u, e.v);
            }
        }
        cout << ans << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...