Submission #575126

# Submission time Handle Problem Language Result Execution time Memory
575126 2022-06-09T17:24:35 Z Sorting Reconstruction Project (JOI22_reconstruction) C++17
42 / 100
5000 ms 400952 KB
#include <bits/stdc++.h>

#pragma GCC optimize("O3")

using namespace std;

typedef long long ll;
template<class T> void check_min(T &a, const T &b){ a = (a < b) ? a : b; }
template<class T> void check_max(T &a, const T &b){ a = (a > b) ? a : b; }
#define all(x) (x).begin(), (x).end()

const int N = 500 + 3;
const int M = 1e5 + 3;
const int Q = 1e6 + 3;
const int INF = 1e9;

int n, m, q;
array<ll, 3> e[M];
ll x[Q];

struct DSU{
    int sz[N], par[N];

    void init(int n){
        for(int i = 1; i <= n; ++i)
            sz[i] = 1, par[i] = i;
    }

    int getP(int x){
        if(par[x] == x) return x;
        return par[x] = getP(par[x]);
    }

    bool unite(int a, int b){
        a = getP(a), b = getP(b);
        if(a == b) return false;
        if(sz[a] < sz[b]) swap(a, b);
        sz[a] += sz[b];
        par[b] = a;
        return true;
    }
} dsu;

int pr[M][N], su[M][N];
int pr_cnt[M], su_cnt[M];

inline void try_dsu(DSU &dsu, int cost, int idx, ll &ans, int &cnt){
    if(dsu.unite(e[idx][1], e[idx][2])){
        ans += cost;
        ++cnt;
    }
}

ll get_ans(int *e1, int *e2, ll x, int ptr){
    ll ans = 0;

    int e1_sz = (ptr >= 1) ? pr_cnt[ptr - 1] : 0;
    int e2_sz = (ptr <= m - 1) ? su_cnt[ptr] : 0;

    dsu.init(n);

    int ptr1 = 0, ptr2 = 0, cnt = 0;
    while(ptr1 != e1_sz && ptr2 != e2_sz && cnt < n - 1){
        int cost1 = x - e[e1[ptr1]][0];
        int cost2 = e[e2[ptr2]][0] - x;

        if(cost1 < cost2)
            try_dsu(dsu, cost1, e1[ptr1++], ans, cnt);
        else
            try_dsu(dsu, cost2, e2[ptr2++], ans, cnt);
    }
    while(ptr1 != e1_sz && cnt < n - 1){
        int cost1 = x - e[e1[ptr1]][0];
        try_dsu(dsu, cost1, e1[ptr1++], ans, cnt);
    }
    while(ptr2 != e2_sz && cnt < n - 1){
        int cost2 = e[e2[ptr2]][0] - x;
        try_dsu(dsu, cost2, e2[ptr2++], ans, cnt);
    }

    return ans;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> m;
    for(int i = 0; i < m; ++i){
        cin >> e[i][1] >> e[i][2] >> e[i][0];
    }
    sort(e, e + m);

    pr[0][0] = 0;
    pr_cnt[0] = 1;
    for(int i = 1; i < m; ++i){
        dsu.init(n);
        pr[i][pr_cnt[i]++] = i;

        for(int j = 0; j < pr_cnt[i - 1]; ++j){
            int idx = pr[i - 1][j];
            if(dsu.unite(e[idx][1], e[idx][2]))
                pr[i][pr_cnt[i]++] = idx;
        }
    }

    su[m - 1][0] = m - 1;
    su_cnt[m - 1] = 1;
    for(int i = m - 2; i >= 0; --i){
        dsu.init(n);
        su[i][su_cnt[i]++] = i;

        for(int j = 0; j < su_cnt[i + 1]; ++j){
            int idx = su[i + 1][j];
            if(dsu.unite(e[idx][1], e[idx][2]))
                su[i][su_cnt[i]++] = idx;
        }
    }

    int ptr = 0;
    cin >> q;
    for(int i = 0; i < q; ++i){
        cin >> x[i];
        while(ptr != m && x[i] >= e[ptr][0])
            ++ptr;

        int *e1;
        if(0 <= ptr - 1){
            e1 = pr[ptr - 1];
        }
        int *e2;
        if(ptr <= m - 1){
            e2 = su[ptr];
        }

        auto ans = get_ans(e1, e2, x[i], ptr);

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

Compilation message

reconstruction.cpp: In function 'int main()':
reconstruction.cpp:136:27: warning: 'e2' may be used uninitialized in this function [-Wmaybe-uninitialized]
  136 |         auto ans = get_ans(e1, e2, x[i], ptr);
      |                    ~~~~~~~^~~~~~~~~~~~~~~~~~~
reconstruction.cpp:136:27: warning: 'e1' may be used uninitialized in this function [-Wmaybe-uninitialized]
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 0 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 0 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 0 ms 340 KB Output is correct
20 Correct 1736 ms 397188 KB Output is correct
21 Correct 1541 ms 397192 KB Output is correct
22 Correct 1641 ms 397108 KB Output is correct
23 Correct 1573 ms 397260 KB Output is correct
24 Correct 1648 ms 397088 KB Output is correct
25 Correct 1729 ms 397260 KB Output is correct
26 Correct 1737 ms 397284 KB Output is correct
27 Correct 1723 ms 397192 KB Output is correct
28 Correct 1739 ms 397188 KB Output is correct
29 Correct 1578 ms 397076 KB Output is correct
30 Correct 1749 ms 397256 KB Output is correct
31 Correct 1733 ms 397168 KB Output is correct
32 Correct 1731 ms 397224 KB Output is correct
33 Correct 1719 ms 397248 KB Output is correct
34 Correct 1281 ms 397088 KB Output is correct
35 Correct 1736 ms 397184 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Execution timed out 5069 ms 400952 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 0 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 0 ms 340 KB Output is correct
20 Execution timed out 5034 ms 16228 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 0 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 0 ms 340 KB Output is correct
20 Correct 1736 ms 397188 KB Output is correct
21 Correct 1541 ms 397192 KB Output is correct
22 Correct 1641 ms 397108 KB Output is correct
23 Correct 1573 ms 397260 KB Output is correct
24 Correct 1648 ms 397088 KB Output is correct
25 Correct 1729 ms 397260 KB Output is correct
26 Correct 1737 ms 397284 KB Output is correct
27 Correct 1723 ms 397192 KB Output is correct
28 Correct 1739 ms 397188 KB Output is correct
29 Correct 1578 ms 397076 KB Output is correct
30 Correct 1749 ms 397256 KB Output is correct
31 Correct 1733 ms 397168 KB Output is correct
32 Correct 1731 ms 397224 KB Output is correct
33 Correct 1719 ms 397248 KB Output is correct
34 Correct 1281 ms 397088 KB Output is correct
35 Correct 1736 ms 397184 KB Output is correct
36 Correct 2188 ms 397640 KB Output is correct
37 Correct 1996 ms 397640 KB Output is correct
38 Correct 2024 ms 397492 KB Output is correct
39 Correct 2119 ms 397504 KB Output is correct
40 Correct 2113 ms 397632 KB Output is correct
41 Correct 2181 ms 397676 KB Output is correct
42 Correct 2126 ms 397492 KB Output is correct
43 Correct 2117 ms 397616 KB Output is correct
44 Correct 2050 ms 397656 KB Output is correct
45 Correct 1648 ms 397680 KB Output is correct
46 Correct 2128 ms 397708 KB Output is correct
47 Correct 2100 ms 397580 KB Output is correct
48 Correct 2095 ms 397652 KB Output is correct
49 Correct 2088 ms 397652 KB Output is correct
50 Correct 1322 ms 397544 KB Output is correct
51 Correct 1920 ms 397664 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 0 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 0 ms 340 KB Output is correct
20 Correct 1736 ms 397188 KB Output is correct
21 Correct 1541 ms 397192 KB Output is correct
22 Correct 1641 ms 397108 KB Output is correct
23 Correct 1573 ms 397260 KB Output is correct
24 Correct 1648 ms 397088 KB Output is correct
25 Correct 1729 ms 397260 KB Output is correct
26 Correct 1737 ms 397284 KB Output is correct
27 Correct 1723 ms 397192 KB Output is correct
28 Correct 1739 ms 397188 KB Output is correct
29 Correct 1578 ms 397076 KB Output is correct
30 Correct 1749 ms 397256 KB Output is correct
31 Correct 1733 ms 397168 KB Output is correct
32 Correct 1731 ms 397224 KB Output is correct
33 Correct 1719 ms 397248 KB Output is correct
34 Correct 1281 ms 397088 KB Output is correct
35 Correct 1736 ms 397184 KB Output is correct
36 Correct 1 ms 340 KB Output is correct
37 Correct 0 ms 340 KB Output is correct
38 Correct 0 ms 340 KB Output is correct
39 Execution timed out 5069 ms 400952 KB Time limit exceeded
40 Halted 0 ms 0 KB -