Submission #329721

# Submission time Handle Problem Language Result Execution time Memory
329721 2020-11-22T06:57:00 Z two_sides Roller Coaster Railroad (IOI16_railroad) C++17
100 / 100
223 ms 14940 KB
#include "railroad.h"
#include <bits/stdc++.h>

using namespace std;

struct dsu {
    vector <int> par;

    dsu(int n) {
        par.resize(n);
        iota(begin(par), end(par), 0);
    }

    int find_set(int u) {
        return u == par[u] ?
        u : par[u] = find_set(par[u]);
    }

    bool union_set(int u, int v) {
        u = find_set(u);
        v = find_set(v);
        if (u == v) return false;
        par[v] = u; return true;
    }
};

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

long long plan_roller_coaster
(vector <int> s, vector <int> t) {
    int n = s.size();
    long long ans = 0;
    vector <int> vals;
    vector <edge> lst;
    for (int x : s) vals.push_back(x);
    for (int x : t) vals.push_back(x);
    sort(begin(vals), end(vals));
    vals.erase(unique(begin(vals),
    end(vals)), end(vals));
    vector <int> bal(vals.size() + 1);
    dsu ds(vals.size());
    for (int i = 0; i < n; i++) {
        s[i] = lower_bound(vals.begin(),
        vals.end(), s[i]) - vals.begin();
        t[i] = lower_bound(vals.begin(),
        vals.end(), t[i]) - vals.begin();
        bal[s[i]]++; bal[t[i]]--;
        ds.union_set(s[i], t[i]);
    }
    int m = vals.size(), cur = 1;
    for (int i = m - 1; i > 0; i--) {
        cur += bal[i];
        if (cur < 0) {
            ans += (long long)cur * 
            (vals[i - 1] - vals[i]);
            ds.union_set(i - 1, i);
        }
        else if (cur > 0)
            ds.union_set(i - 1, i);
        else lst.push_back({i - 1, i,
            vals[i] - vals[i - 1]});
    }
    sort(lst.begin(), lst.end(),
    [](const edge &p, const edge &q) {
        return p.w < q.w;
    });
    for (const edge &e : lst)
        if (ds.union_set(e.u, e.v))
            ans += e.w;
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 2
2 Correct 1 ms 364 KB n = 2
3 Correct 1 ms 364 KB n = 2
4 Correct 1 ms 364 KB n = 2
5 Correct 1 ms 364 KB n = 2
6 Correct 1 ms 364 KB n = 2
7 Correct 1 ms 364 KB n = 3
8 Correct 1 ms 364 KB n = 3
9 Correct 1 ms 364 KB n = 3
10 Correct 1 ms 364 KB n = 8
11 Correct 1 ms 364 KB n = 8
12 Correct 1 ms 364 KB n = 8
13 Correct 1 ms 364 KB n = 8
14 Correct 1 ms 364 KB n = 8
15 Correct 0 ms 364 KB n = 8
16 Correct 1 ms 364 KB n = 8
17 Correct 1 ms 364 KB n = 8
18 Correct 1 ms 364 KB n = 8
19 Correct 1 ms 364 KB n = 3
20 Correct 1 ms 364 KB n = 7
21 Correct 1 ms 364 KB n = 8
22 Correct 1 ms 364 KB n = 8
23 Correct 1 ms 384 KB n = 8
24 Correct 1 ms 364 KB n = 8
25 Correct 1 ms 364 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 2
2 Correct 1 ms 364 KB n = 2
3 Correct 1 ms 364 KB n = 2
4 Correct 1 ms 364 KB n = 2
5 Correct 1 ms 364 KB n = 2
6 Correct 1 ms 364 KB n = 2
7 Correct 1 ms 364 KB n = 3
8 Correct 1 ms 364 KB n = 3
9 Correct 1 ms 364 KB n = 3
10 Correct 1 ms 364 KB n = 8
11 Correct 1 ms 364 KB n = 8
12 Correct 1 ms 364 KB n = 8
13 Correct 1 ms 364 KB n = 8
14 Correct 1 ms 364 KB n = 8
15 Correct 0 ms 364 KB n = 8
16 Correct 1 ms 364 KB n = 8
17 Correct 1 ms 364 KB n = 8
18 Correct 1 ms 364 KB n = 8
19 Correct 1 ms 364 KB n = 3
20 Correct 1 ms 364 KB n = 7
21 Correct 1 ms 364 KB n = 8
22 Correct 1 ms 364 KB n = 8
23 Correct 1 ms 384 KB n = 8
24 Correct 1 ms 364 KB n = 8
25 Correct 1 ms 364 KB n = 8
26 Correct 1 ms 372 KB n = 8
27 Correct 1 ms 364 KB n = 8
28 Correct 1 ms 364 KB n = 8
29 Correct 1 ms 364 KB n = 16
30 Correct 1 ms 364 KB n = 16
31 Correct 1 ms 364 KB n = 16
32 Correct 1 ms 364 KB n = 16
33 Correct 1 ms 364 KB n = 16
34 Correct 1 ms 364 KB n = 16
35 Correct 1 ms 364 KB n = 16
36 Correct 1 ms 364 KB n = 15
37 Correct 1 ms 364 KB n = 8
38 Correct 1 ms 364 KB n = 16
39 Correct 1 ms 364 KB n = 16
40 Correct 1 ms 384 KB n = 9
41 Correct 1 ms 364 KB n = 16
42 Correct 1 ms 364 KB n = 16
43 Correct 1 ms 364 KB n = 16
44 Correct 1 ms 364 KB n = 9
45 Correct 1 ms 364 KB n = 15
46 Correct 1 ms 364 KB n = 16
47 Correct 1 ms 364 KB n = 16
48 Correct 1 ms 364 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 209 ms 8560 KB n = 199999
2 Correct 212 ms 8540 KB n = 199991
3 Correct 204 ms 8688 KB n = 199993
4 Correct 149 ms 6620 KB n = 152076
5 Correct 93 ms 4448 KB n = 93249
6 Correct 174 ms 7900 KB n = 199910
7 Correct 190 ms 8412 KB n = 199999
8 Correct 171 ms 8028 KB n = 199997
9 Correct 172 ms 7388 KB n = 171294
10 Correct 134 ms 6236 KB n = 140872
11 Correct 178 ms 8156 KB n = 199886
12 Correct 184 ms 9948 KB n = 199996
13 Correct 175 ms 9564 KB n = 200000
14 Correct 190 ms 12892 KB n = 199998
15 Correct 196 ms 13784 KB n = 200000
16 Correct 202 ms 13020 KB n = 199998
17 Correct 196 ms 14940 KB n = 200000
18 Correct 184 ms 9052 KB n = 190000
19 Correct 167 ms 13148 KB n = 177777
20 Correct 90 ms 4704 KB n = 100000
21 Correct 190 ms 8668 KB n = 200000
22 Correct 222 ms 13148 KB n = 200000
23 Correct 217 ms 13020 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 2
2 Correct 1 ms 364 KB n = 2
3 Correct 1 ms 364 KB n = 2
4 Correct 1 ms 364 KB n = 2
5 Correct 1 ms 364 KB n = 2
6 Correct 1 ms 364 KB n = 2
7 Correct 1 ms 364 KB n = 3
8 Correct 1 ms 364 KB n = 3
9 Correct 1 ms 364 KB n = 3
10 Correct 1 ms 364 KB n = 8
11 Correct 1 ms 364 KB n = 8
12 Correct 1 ms 364 KB n = 8
13 Correct 1 ms 364 KB n = 8
14 Correct 1 ms 364 KB n = 8
15 Correct 0 ms 364 KB n = 8
16 Correct 1 ms 364 KB n = 8
17 Correct 1 ms 364 KB n = 8
18 Correct 1 ms 364 KB n = 8
19 Correct 1 ms 364 KB n = 3
20 Correct 1 ms 364 KB n = 7
21 Correct 1 ms 364 KB n = 8
22 Correct 1 ms 364 KB n = 8
23 Correct 1 ms 384 KB n = 8
24 Correct 1 ms 364 KB n = 8
25 Correct 1 ms 364 KB n = 8
26 Correct 1 ms 372 KB n = 8
27 Correct 1 ms 364 KB n = 8
28 Correct 1 ms 364 KB n = 8
29 Correct 1 ms 364 KB n = 16
30 Correct 1 ms 364 KB n = 16
31 Correct 1 ms 364 KB n = 16
32 Correct 1 ms 364 KB n = 16
33 Correct 1 ms 364 KB n = 16
34 Correct 1 ms 364 KB n = 16
35 Correct 1 ms 364 KB n = 16
36 Correct 1 ms 364 KB n = 15
37 Correct 1 ms 364 KB n = 8
38 Correct 1 ms 364 KB n = 16
39 Correct 1 ms 364 KB n = 16
40 Correct 1 ms 384 KB n = 9
41 Correct 1 ms 364 KB n = 16
42 Correct 1 ms 364 KB n = 16
43 Correct 1 ms 364 KB n = 16
44 Correct 1 ms 364 KB n = 9
45 Correct 1 ms 364 KB n = 15
46 Correct 1 ms 364 KB n = 16
47 Correct 1 ms 364 KB n = 16
48 Correct 1 ms 364 KB n = 16
49 Correct 209 ms 8560 KB n = 199999
50 Correct 212 ms 8540 KB n = 199991
51 Correct 204 ms 8688 KB n = 199993
52 Correct 149 ms 6620 KB n = 152076
53 Correct 93 ms 4448 KB n = 93249
54 Correct 174 ms 7900 KB n = 199910
55 Correct 190 ms 8412 KB n = 199999
56 Correct 171 ms 8028 KB n = 199997
57 Correct 172 ms 7388 KB n = 171294
58 Correct 134 ms 6236 KB n = 140872
59 Correct 178 ms 8156 KB n = 199886
60 Correct 184 ms 9948 KB n = 199996
61 Correct 175 ms 9564 KB n = 200000
62 Correct 190 ms 12892 KB n = 199998
63 Correct 196 ms 13784 KB n = 200000
64 Correct 202 ms 13020 KB n = 199998
65 Correct 196 ms 14940 KB n = 200000
66 Correct 184 ms 9052 KB n = 190000
67 Correct 167 ms 13148 KB n = 177777
68 Correct 90 ms 4704 KB n = 100000
69 Correct 190 ms 8668 KB n = 200000
70 Correct 222 ms 13148 KB n = 200000
71 Correct 217 ms 13020 KB n = 200000
72 Correct 200 ms 8520 KB n = 200000
73 Correct 207 ms 8540 KB n = 200000
74 Correct 200 ms 8540 KB n = 200000
75 Correct 186 ms 8540 KB n = 200000
76 Correct 185 ms 8760 KB n = 200000
77 Correct 155 ms 6876 KB n = 200000
78 Correct 181 ms 11484 KB n = 200000
79 Correct 184 ms 7900 KB n = 184307
80 Correct 68 ms 3680 KB n = 76040
81 Correct 174 ms 8284 KB n = 199981
82 Correct 184 ms 9692 KB n = 199994
83 Correct 179 ms 9052 KB n = 199996
84 Correct 194 ms 14040 KB n = 199998
85 Correct 191 ms 12892 KB n = 200000
86 Correct 202 ms 13552 KB n = 199998
87 Correct 185 ms 14812 KB n = 200000
88 Correct 187 ms 9564 KB n = 200000
89 Correct 189 ms 14812 KB n = 200000
90 Correct 190 ms 8540 KB n = 200000
91 Correct 223 ms 13020 KB n = 200000
92 Correct 217 ms 13148 KB n = 200000