Submission #710151

#TimeUsernameProblemLanguageResultExecution timeMemory
710151PixelCatReconstruction Project (JOI22_reconstruction)C++14
7 / 100
90 ms6812 KiB
#include <bits/stdc++.h>
#define For(i, a, b) for(int i = a; i <= b; i++)
#define Forr(i, a, b) for(int i = a; i >= b; i--)
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define sz(x) ((int)x.size())
#define eb emplace_back
#define int LL
using namespace std;
using LL = long long;
using pii = pair<int, int>;

const int MAXN = 510;
const int MAXM = 100010;

struct DSU {
    int p[MAXN];
    void init() {
        memset(p, 0, sizeof(p));
    }
    int find(int n) {
        if(!p[n]) return n;
        return p[n] = find(p[n]);
    }
    bool uni(int a, int b) {
        a = find(a); b = find(b);
        if(a != b) {
            p[b] = a;
            return true;
        }
        return false;
    }
} dsu;

struct Edge {
    int a, b, w, w2;
} ed[MAXM];

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    // =^-w-^=
    int n, m; cin >> n >> m;
    For(i, 1, m) {
        auto &e = ed[i];
        cin >> e.a >> e.b >> e.w;
    }
    int q; cin >> q;
    assert(q <= 10);
    while(q--) {
        int x; cin >> x;
        For(i, 1, m) {
            ed[i].w2 = abs(ed[i].w - x);
        }
        sort(ed + 1, ed + m + 1, [&](auto &a, auto &b) {
            return a.w2 < b.w2;
        });
        int ans = 0;
        dsu.init();
        For(i, 1, m) {
            auto e = ed[i];
            if(dsu.uni(e.a, e.b)) ans += e.w2;
        }
        cout << ans << "\n";
    }
    return 0;
}
#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...