Submission #713038

# Submission time Handle Problem Language Result Execution time Memory
713038 2023-03-21T00:35:58 Z GrindMachine Reconstruction Project (JOI22_reconstruction) C++17
42 / 100
5000 ms 411764 KB
// Om Namah Shivaya

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long int ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL)
#define pb push_back
#define endl '\n'
#define sz(a) a.size()
#define setbits(x) __builtin_popcountll(x)
#define ff first
#define ss second
#define conts continue
#define ceil2(x, y) ((x + y - 1) / (y))
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define yes cout << "Yes" << endl
#define no cout << "No" << endl

#define rep(i, n) for(int i = 0; i < n; ++i)
#define rep1(i, n) for(int i = 1; i <= n; ++i)
#define rev(i, s, e) for(int i = s; i >= e; --i)
#define trav(i, a) for(auto &i : a)

template<typename T>
void amin(T &a, T b) {
    a = min(a, b);
}

template<typename T>
void amax(T &a, T b) {
    a = max(a, b);
}

#ifdef LOCAL
#include "debug.h"
#else
#define debug(x) 42
#endif

/*



*/

const int MOD = 1e9 + 7;
const int N = 1e5 + 5;
const int inf1 = int(1e9) + 5;
const ll inf2 = ll(1e18) + 5;

struct DSU {
    vector<int> par, rankk, siz;
    int n;

    DSU() {

    }

    DSU(int n) {
        init(n);
    }

    void init(int n_) {
        n = n_;
        par = vector<int>(n + 1);
        rankk = vector<int>(n + 1);
        siz = vector<int>(n + 1);
        rep(i, n + 1) create(i);
    }

    void reset() {
        rep(i, n + 1) create(i);
    }

    void create(int u) {
        par[u] = u;
        rankk[u] = 0;
        siz[u] = 1;
    }

    int find(int u) {
        if (u == par[u]) return u;
        else return par[u] = find(par[u]);
    }

    bool same(int u, int v) {
        return find(u) == find(v);
    }

    void merge(int u, int v) {
        u = find(u), v = find(v);
        if (u == v) return;

        if (rankk[u] == rankk[v]) rankk[u]++;
        if (rankk[u] < rankk[v]) swap(u, v);

        par[v] = u;
        siz[u] += siz[v];
    }
};

void solve(int test_case)
{
    int n, m; cin >> n >> m;
    vector<array<int, 3>> edges(m);
    rep(i, m) {
        int u, v, w; cin >> u >> v >> w;
        edges[i] = {w, u, v};
    }

    sort(all(edges));

    vector<int> pickl[m], pickr[m];
    vector<ll> active;
    DSU dsu(n + 5);

    rep(i, m) {
        dsu.reset();

        pickl[i].pb(i);
        dsu.merge(edges[i][1], edges[i][2]);

        vector<ll> nxt;
        nxt.pb(i);

        trav(id, active) {
            if (dsu.same(edges[id][1], edges[id][2])) {
                conts;
            }

            dsu.merge(edges[id][1], edges[id][2]);
            pickl[i].pb(id);
            nxt.pb(id);
        }

        active = nxt;
    }

    active.clear();

    rev(i, m - 1, 0) {
        dsu.reset();

        pickr[i].pb(i);
        dsu.merge(edges[i][1], edges[i][2]);

        vector<ll> nxt;
        nxt.pb(i);

        trav(id, active) {
            if (dsu.same(edges[id][1], edges[id][2])) {
                conts;
            }

            dsu.merge(edges[id][1], edges[id][2]);
            pickr[i].pb(id);
            nxt.pb(id);
        }

        active = nxt;
    }

    int q; cin >> q;

    while (q--) {
        int k; cin >> k;
        array<int, 3> key = {k, -1, -1};
        auto it = lower_bound(all(edges), key);
        ll pos = -1;
        ll mn = inf2;

        if (it != edges.end()) {
            ll d = abs((*it)[0] - k);
            if (d < mn) {
                mn = d;
                pos = it - edges.begin();
            }
        }

        if (it != edges.begin()) {
            it--;
            ll d = abs((*it)[0] - k);
            if (d < mn) {
                mn = d;
                pos = it - edges.begin();
            }
        }

        auto v1 = pickl[pos];
        auto v2 = pickr[pos];
        int siz1 = sz(v1), siz2 = sz(v2);
        int ptr1 = 0, ptr2 = 0;
        dsu.reset();

        ll ans = 0;

        auto add = [&](ll id) {
            auto [w, u, v] = edges[id];
            if (dsu.same(u, v)) return;
            dsu.merge(u, v);
            ans += abs(w - k);
        };

        while (ptr1 < siz1 or ptr2 < siz2) {
            if (ptr1 == siz1) {
                add(v2[ptr2++]);
            }
            else if (ptr2 == siz2) {
                add(v1[ptr1++]);
            }
            else {
                if (abs(edges[v1[ptr1]][0] - k) <= abs(edges[v2[ptr2]][0] - k)) {
                    add(v1[ptr1++]);
                }
                else {
                    add(v2[ptr2++]);
                }
            }
        }

        cout << ans << endl;
    }
}

int main()
{
    fastio;

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

    rep1(i, t) {
        solve(i);
    }

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 3558 ms 409496 KB Output is correct
21 Correct 3223 ms 410084 KB Output is correct
22 Correct 3376 ms 410112 KB Output is correct
23 Correct 3319 ms 409976 KB Output is correct
24 Correct 3439 ms 410100 KB Output is correct
25 Correct 3524 ms 410060 KB Output is correct
26 Correct 3493 ms 410120 KB Output is correct
27 Correct 3498 ms 410156 KB Output is correct
28 Correct 3533 ms 410088 KB Output is correct
29 Correct 3197 ms 407092 KB Output is correct
30 Correct 3473 ms 410288 KB Output is correct
31 Correct 3508 ms 410148 KB Output is correct
32 Correct 3531 ms 409816 KB Output is correct
33 Correct 3494 ms 409908 KB Output is correct
34 Correct 2377 ms 379960 KB Output is correct
35 Correct 3536 ms 409852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Execution timed out 5053 ms 410868 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Execution timed out 5079 ms 7724 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 3558 ms 409496 KB Output is correct
21 Correct 3223 ms 410084 KB Output is correct
22 Correct 3376 ms 410112 KB Output is correct
23 Correct 3319 ms 409976 KB Output is correct
24 Correct 3439 ms 410100 KB Output is correct
25 Correct 3524 ms 410060 KB Output is correct
26 Correct 3493 ms 410120 KB Output is correct
27 Correct 3498 ms 410156 KB Output is correct
28 Correct 3533 ms 410088 KB Output is correct
29 Correct 3197 ms 407092 KB Output is correct
30 Correct 3473 ms 410288 KB Output is correct
31 Correct 3508 ms 410148 KB Output is correct
32 Correct 3531 ms 409816 KB Output is correct
33 Correct 3494 ms 409908 KB Output is correct
34 Correct 2377 ms 379960 KB Output is correct
35 Correct 3536 ms 409852 KB Output is correct
36 Correct 4234 ms 409972 KB Output is correct
37 Correct 3816 ms 411560 KB Output is correct
38 Correct 3991 ms 411392 KB Output is correct
39 Correct 4042 ms 411480 KB Output is correct
40 Correct 4108 ms 411548 KB Output is correct
41 Correct 4164 ms 411728 KB Output is correct
42 Correct 4193 ms 411700 KB Output is correct
43 Correct 4224 ms 411588 KB Output is correct
44 Correct 4097 ms 411656 KB Output is correct
45 Correct 3529 ms 408504 KB Output is correct
46 Correct 4136 ms 411764 KB Output is correct
47 Correct 4170 ms 411744 KB Output is correct
48 Correct 4111 ms 411568 KB Output is correct
49 Correct 4187 ms 411584 KB Output is correct
50 Correct 2653 ms 382012 KB Output is correct
51 Correct 4006 ms 411624 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 3558 ms 409496 KB Output is correct
21 Correct 3223 ms 410084 KB Output is correct
22 Correct 3376 ms 410112 KB Output is correct
23 Correct 3319 ms 409976 KB Output is correct
24 Correct 3439 ms 410100 KB Output is correct
25 Correct 3524 ms 410060 KB Output is correct
26 Correct 3493 ms 410120 KB Output is correct
27 Correct 3498 ms 410156 KB Output is correct
28 Correct 3533 ms 410088 KB Output is correct
29 Correct 3197 ms 407092 KB Output is correct
30 Correct 3473 ms 410288 KB Output is correct
31 Correct 3508 ms 410148 KB Output is correct
32 Correct 3531 ms 409816 KB Output is correct
33 Correct 3494 ms 409908 KB Output is correct
34 Correct 2377 ms 379960 KB Output is correct
35 Correct 3536 ms 409852 KB Output is correct
36 Correct 1 ms 212 KB Output is correct
37 Correct 1 ms 320 KB Output is correct
38 Correct 1 ms 212 KB Output is correct
39 Execution timed out 5053 ms 410868 KB Time limit exceeded
40 Halted 0 ms 0 KB -