Submission #915210

# Submission time Handle Problem Language Result Execution time Memory
915210 2024-01-23T13:35:48 Z vjudge1 Roller Coaster Railroad (IOI16_railroad) C++17
100 / 100
184 ms 23336 KB
#include "railroad.h"

#include <bits/stdc++.h>
using namespace std;

struct dsu {
        vector<int> p;
        dsu(int n) : p(n, -1) {}
        bool unite(int u, int v) {
                if ((u = root(u)) == (v = root(v))) return false;
                if (p[u] > p[v]) swap(u, v);
                p[u] += p[v];
                p[v] = u;
                return true;
        }
        bool same(int u, int v) { return root(u) == root(v); }
        int root(int u) { return p[u] < 0 ? u : p[u] = root(p[u]); }
};

long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) {
        int n = (int)s.size() + 1;
        s.emplace_back(1e9);
        t.emplace_back(1);

        vector<int> point;
        for (int i = 0; i < n; i++) {
                point.push_back(s[i]);
                point.push_back(t[i]);
        }
        sort(point.begin(), point.end());
        point.erase(unique(point.begin(), point.end()), point.end());
        vector<int> a(n), b(n);
        for (int i = 0; i < n; i++) {
                a[i] = lower_bound(point.begin(), point.end(), s[i]) - point.begin();
                b[i] = lower_bound(point.begin(), point.end(), t[i]) - point.begin();
        }
        int m = point.size();
        vector<int> pref(m);
        for (int i = 0; i < n; i++) pref[a[i]]++, pref[b[i]]--;
        for (int i = 1; i < m; i++) pref[i] += pref[i - 1];

        int64_t res = 0;
        dsu d(m);
        for (int i = 0; i + 1 < m; i++) {
                res += 1ll * max(0, pref[i]) * (point[i + 1] - point[i]);
                if (pref[i] != 0) d.unite(i, i + 1);
        }

        for (int i = 0; i < n; i++) d.unite(a[i], b[i]);
        vector<tuple<int, int, int>> edges;
        for (int i = 0; i + 1 < m; i++) {
                edges.emplace_back(point[i + 1] - point[i], i, i + 1);
        }

        sort(edges.begin(), edges.end());
        for (auto [w, u, v] : edges) {
                if (d.unite(u, v)) res += w;
        }

        return res;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 440 KB n = 2
2 Correct 1 ms 348 KB n = 2
3 Correct 0 ms 348 KB n = 2
4 Correct 0 ms 436 KB n = 2
5 Correct 0 ms 348 KB n = 2
6 Correct 0 ms 344 KB n = 2
7 Correct 0 ms 348 KB n = 3
8 Correct 0 ms 348 KB n = 3
9 Correct 1 ms 348 KB n = 3
10 Correct 1 ms 348 KB n = 8
11 Correct 1 ms 348 KB n = 8
12 Correct 1 ms 412 KB n = 8
13 Correct 1 ms 600 KB n = 8
14 Correct 1 ms 348 KB n = 8
15 Correct 1 ms 344 KB n = 8
16 Correct 1 ms 348 KB n = 8
17 Correct 1 ms 348 KB n = 8
18 Correct 1 ms 348 KB n = 8
19 Correct 1 ms 348 KB n = 3
20 Correct 1 ms 348 KB n = 7
21 Correct 1 ms 348 KB n = 8
22 Correct 1 ms 344 KB n = 8
23 Correct 1 ms 348 KB n = 8
24 Correct 1 ms 348 KB n = 8
25 Correct 1 ms 348 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 440 KB n = 2
2 Correct 1 ms 348 KB n = 2
3 Correct 0 ms 348 KB n = 2
4 Correct 0 ms 436 KB n = 2
5 Correct 0 ms 348 KB n = 2
6 Correct 0 ms 344 KB n = 2
7 Correct 0 ms 348 KB n = 3
8 Correct 0 ms 348 KB n = 3
9 Correct 1 ms 348 KB n = 3
10 Correct 1 ms 348 KB n = 8
11 Correct 1 ms 348 KB n = 8
12 Correct 1 ms 412 KB n = 8
13 Correct 1 ms 600 KB n = 8
14 Correct 1 ms 348 KB n = 8
15 Correct 1 ms 344 KB n = 8
16 Correct 1 ms 348 KB n = 8
17 Correct 1 ms 348 KB n = 8
18 Correct 1 ms 348 KB n = 8
19 Correct 1 ms 348 KB n = 3
20 Correct 1 ms 348 KB n = 7
21 Correct 1 ms 348 KB n = 8
22 Correct 1 ms 344 KB n = 8
23 Correct 1 ms 348 KB n = 8
24 Correct 1 ms 348 KB n = 8
25 Correct 1 ms 348 KB n = 8
26 Correct 1 ms 344 KB n = 8
27 Correct 1 ms 344 KB n = 8
28 Correct 1 ms 348 KB n = 8
29 Correct 0 ms 348 KB n = 16
30 Correct 1 ms 348 KB n = 16
31 Correct 0 ms 348 KB n = 16
32 Correct 0 ms 348 KB n = 16
33 Correct 1 ms 348 KB n = 16
34 Correct 1 ms 348 KB n = 16
35 Correct 0 ms 348 KB n = 16
36 Correct 0 ms 348 KB n = 15
37 Correct 1 ms 348 KB n = 8
38 Correct 0 ms 348 KB n = 16
39 Correct 1 ms 600 KB n = 16
40 Correct 1 ms 348 KB n = 9
41 Correct 0 ms 348 KB n = 16
42 Correct 0 ms 348 KB n = 16
43 Correct 0 ms 348 KB n = 16
44 Correct 1 ms 348 KB n = 9
45 Correct 0 ms 348 KB n = 15
46 Correct 1 ms 348 KB n = 16
47 Correct 0 ms 348 KB n = 16
48 Correct 0 ms 348 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 169 ms 21800 KB n = 199999
2 Correct 166 ms 21292 KB n = 199991
3 Correct 161 ms 22824 KB n = 199993
4 Correct 139 ms 19092 KB n = 152076
5 Correct 73 ms 10348 KB n = 93249
6 Correct 141 ms 20780 KB n = 199910
7 Correct 153 ms 21072 KB n = 199999
8 Correct 138 ms 20876 KB n = 199997
9 Correct 141 ms 20488 KB n = 171294
10 Correct 113 ms 18588 KB n = 140872
11 Correct 152 ms 21544 KB n = 199886
12 Correct 164 ms 21176 KB n = 199996
13 Correct 155 ms 20512 KB n = 200000
14 Correct 155 ms 21912 KB n = 199998
15 Correct 159 ms 21276 KB n = 200000
16 Correct 162 ms 22300 KB n = 199998
17 Correct 157 ms 21540 KB n = 200000
18 Correct 175 ms 21568 KB n = 190000
19 Correct 142 ms 20440 KB n = 177777
20 Correct 75 ms 11324 KB n = 100000
21 Correct 170 ms 22060 KB n = 200000
22 Correct 154 ms 22436 KB n = 200000
23 Correct 157 ms 22856 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 1 ms 440 KB n = 2
2 Correct 1 ms 348 KB n = 2
3 Correct 0 ms 348 KB n = 2
4 Correct 0 ms 436 KB n = 2
5 Correct 0 ms 348 KB n = 2
6 Correct 0 ms 344 KB n = 2
7 Correct 0 ms 348 KB n = 3
8 Correct 0 ms 348 KB n = 3
9 Correct 1 ms 348 KB n = 3
10 Correct 1 ms 348 KB n = 8
11 Correct 1 ms 348 KB n = 8
12 Correct 1 ms 412 KB n = 8
13 Correct 1 ms 600 KB n = 8
14 Correct 1 ms 348 KB n = 8
15 Correct 1 ms 344 KB n = 8
16 Correct 1 ms 348 KB n = 8
17 Correct 1 ms 348 KB n = 8
18 Correct 1 ms 348 KB n = 8
19 Correct 1 ms 348 KB n = 3
20 Correct 1 ms 348 KB n = 7
21 Correct 1 ms 348 KB n = 8
22 Correct 1 ms 344 KB n = 8
23 Correct 1 ms 348 KB n = 8
24 Correct 1 ms 348 KB n = 8
25 Correct 1 ms 348 KB n = 8
26 Correct 1 ms 344 KB n = 8
27 Correct 1 ms 344 KB n = 8
28 Correct 1 ms 348 KB n = 8
29 Correct 0 ms 348 KB n = 16
30 Correct 1 ms 348 KB n = 16
31 Correct 0 ms 348 KB n = 16
32 Correct 0 ms 348 KB n = 16
33 Correct 1 ms 348 KB n = 16
34 Correct 1 ms 348 KB n = 16
35 Correct 0 ms 348 KB n = 16
36 Correct 0 ms 348 KB n = 15
37 Correct 1 ms 348 KB n = 8
38 Correct 0 ms 348 KB n = 16
39 Correct 1 ms 600 KB n = 16
40 Correct 1 ms 348 KB n = 9
41 Correct 0 ms 348 KB n = 16
42 Correct 0 ms 348 KB n = 16
43 Correct 0 ms 348 KB n = 16
44 Correct 1 ms 348 KB n = 9
45 Correct 0 ms 348 KB n = 15
46 Correct 1 ms 348 KB n = 16
47 Correct 0 ms 348 KB n = 16
48 Correct 0 ms 348 KB n = 16
49 Correct 169 ms 21800 KB n = 199999
50 Correct 166 ms 21292 KB n = 199991
51 Correct 161 ms 22824 KB n = 199993
52 Correct 139 ms 19092 KB n = 152076
53 Correct 73 ms 10348 KB n = 93249
54 Correct 141 ms 20780 KB n = 199910
55 Correct 153 ms 21072 KB n = 199999
56 Correct 138 ms 20876 KB n = 199997
57 Correct 141 ms 20488 KB n = 171294
58 Correct 113 ms 18588 KB n = 140872
59 Correct 152 ms 21544 KB n = 199886
60 Correct 164 ms 21176 KB n = 199996
61 Correct 155 ms 20512 KB n = 200000
62 Correct 155 ms 21912 KB n = 199998
63 Correct 159 ms 21276 KB n = 200000
64 Correct 162 ms 22300 KB n = 199998
65 Correct 157 ms 21540 KB n = 200000
66 Correct 175 ms 21568 KB n = 190000
67 Correct 142 ms 20440 KB n = 177777
68 Correct 75 ms 11324 KB n = 100000
69 Correct 170 ms 22060 KB n = 200000
70 Correct 154 ms 22436 KB n = 200000
71 Correct 157 ms 22856 KB n = 200000
72 Correct 165 ms 23336 KB n = 200000
73 Correct 183 ms 22060 KB n = 200000
74 Correct 163 ms 22308 KB n = 200000
75 Correct 163 ms 21648 KB n = 200000
76 Correct 184 ms 21544 KB n = 200000
77 Correct 127 ms 17956 KB n = 200000
78 Correct 124 ms 17704 KB n = 200000
79 Correct 160 ms 22184 KB n = 184307
80 Correct 58 ms 9080 KB n = 76040
81 Correct 150 ms 19924 KB n = 199981
82 Correct 163 ms 20780 KB n = 199994
83 Correct 146 ms 21796 KB n = 199996
84 Correct 156 ms 21284 KB n = 199998
85 Correct 157 ms 22000 KB n = 200000
86 Correct 171 ms 21392 KB n = 199998
87 Correct 158 ms 23080 KB n = 200000
88 Correct 168 ms 21276 KB n = 200000
89 Correct 165 ms 21648 KB n = 200000
90 Correct 166 ms 22144 KB n = 200000
91 Correct 159 ms 21804 KB n = 200000
92 Correct 170 ms 22348 KB n = 200000