Submission #1262848

#TimeUsernameProblemLanguageResultExecution timeMemory
1262848norman165Reconstruction Project (JOI22_reconstruction)C++20
7 / 100
5093 ms5148 KiB
#include <bits/stdc++.h>

#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define int long long
#define yes() cout << "YES\n"
#define no() cout << "NO\n"

using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;

const int inf = 1e18;
const int mod = 1e9 + 7;
const int maxn = 1e6;
const int mod1 = 998244353;
const int mod2 = 1e18 + 1;
const int mod3 = 1e9 + 9;
const int mod4 = 333333333;
const int mod5 = 200000;
const int mod6 = 10007;
const int k = 3000;
const int w = 1e5;
const ld EPS = 1e-8;

int LOG = 30;

struct DSU {
    vector<int> p, sz;
    int n, prime;

    DSU(int x) {
        n = x, prime = x;
        p.assign(n, 0);
        sz.assign(n, 1);
        iota(all(p), 0ll);
    }

    int get(int x) {
        if (p[x] == x) return x;
        return p[x] = get(p[x]);
    }

    bool check(int a, int b) {
        return get(a) == get(b);
    }

    void unite(int a, int b) {
        a = get(a), b = get(b);
        if (a == b) return;

        prime--;
        if (sz[a] < sz[b]) swap(a, b);
        p[b] = a;
        sz[a] += sz[b];
    }
};

struct e {
    int u, v, w;
};

void solve() {
    int n, m;
    cin >> n >> m;

    vector<e> g;
    for (int i = 0; i < m; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        u--, v--;

        g.push_back({u, v, w});
    }

    int q;
    cin >> q;

    while (q--) {
        int x;
        cin >> x;

        vector<e> g1 = g;
        sort(all(g1), [&](e a, e b) {
            return abs(a.w - x) < abs(b.w - x);
        });

        DSU dsu(n);
        int ans = 0;

        for (auto& [u, v, w] : g1) {
            if (dsu.check(u, v)) continue;
            dsu.unite(u, v);
            ans += abs(x - w);
            if (dsu.prime == 1) break;
        }

        cout << ans << "\n";
    }
}

signed main() {
    // cout.precision(16);

    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t = 1;
    // cin >> t;

    while (t--) {
        solve();
    }
}
#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...