Submission #434408

# Submission time Handle Problem Language Result Execution time Memory
434408 2021-06-21T08:42:21 Z 79brue Roller Coaster Railroad (IOI16_railroad) C++14
100 / 100
877 ms 88636 KB
#include <bits/stdc++.h>
#include "railroad.h"

using namespace std;

typedef long long ll;

struct Edge{
    int x, y; ll z;
    Edge(){}
    Edge(int x, int y, ll z): x(x), y(y), z(z){}

    bool operator<(const Edge &r)const{
        return z > r.z;
    }
};

int n, k;
vector<int> vec;
map<int, int> idx;

vector<int> link[500002];
vector<int> revLink[500002];

ll ans;

int par[500002];

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

void merge(int x, int y){
    x = find(x), y = find(y);
    par[x] = y;
}

ll plan_roller_coaster(vector<int> s, vector<int> t) {
    n = (int)s.size();
    for(int i=0; i<n; i++){
        vec.push_back(s[i]);
        vec.push_back(t[i]);
    }

    vec.push_back(1);
    vec.push_back(1e9);
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());

    k = (int)vec.size();
    for(int i=0; i<k; i++) idx[vec[i]] = i;

    for(int i=0; i<n; i++){
        s[i] = idx[s[i]];
        t[i] = idx[t[i]];
        link[s[i]].push_back(t[i]);
        revLink[t[i]].push_back(s[i]);
    }
    link[k-1].push_back(0);
    revLink[0].push_back(k-1);

    int need = 0;
    for(int i=0; i<k; i++){
        need += (int)link[i].size();
        need -= (int)revLink[i].size();

        if(need < 0){
            link[i].push_back(i+1);
            revLink[i+1].push_back(i);
            need++;
        }
        else if(need > 0){
            link[i+1].push_back(i);
            revLink[i].push_back(i+1);
            ans += ll(vec[i+1] - vec[i]) * need;
            need--;
        }
    }

    for(int i=0; i<k; i++) par[i] = i;
    for(int i=0; i<k; i++){
        for(auto x: link[i]){
            merge(i, x);
        }
    }

    priority_queue<Edge> pq;
    for(int i=0; i<k-1; i++){
        pq.push(Edge(i, i+1, vec[i+1] - vec[i]));
    }

    while(!pq.empty()){
        Edge tmp = pq.top(); pq.pop();
        if(find(tmp.x) == find(tmp.y)) continue;
        ans += tmp.z;
        merge(tmp.x, tmp.y);
    }

    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 14 ms 23756 KB n = 2
2 Correct 14 ms 23756 KB n = 2
3 Correct 15 ms 23788 KB n = 2
4 Correct 15 ms 23792 KB n = 2
5 Correct 15 ms 23788 KB n = 2
6 Correct 14 ms 23756 KB n = 2
7 Correct 15 ms 23788 KB n = 3
8 Correct 15 ms 23756 KB n = 3
9 Correct 14 ms 23756 KB n = 3
10 Correct 15 ms 23784 KB n = 8
11 Correct 15 ms 23716 KB n = 8
12 Correct 16 ms 23788 KB n = 8
13 Correct 15 ms 23700 KB n = 8
14 Correct 14 ms 23756 KB n = 8
15 Correct 15 ms 23896 KB n = 8
16 Correct 15 ms 23692 KB n = 8
17 Correct 15 ms 23748 KB n = 8
18 Correct 14 ms 23788 KB n = 8
19 Correct 14 ms 23684 KB n = 3
20 Correct 14 ms 23756 KB n = 7
21 Correct 14 ms 23756 KB n = 8
22 Correct 14 ms 23792 KB n = 8
23 Correct 14 ms 23756 KB n = 8
24 Correct 15 ms 23788 KB n = 8
25 Correct 14 ms 23756 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 14 ms 23756 KB n = 2
2 Correct 14 ms 23756 KB n = 2
3 Correct 15 ms 23788 KB n = 2
4 Correct 15 ms 23792 KB n = 2
5 Correct 15 ms 23788 KB n = 2
6 Correct 14 ms 23756 KB n = 2
7 Correct 15 ms 23788 KB n = 3
8 Correct 15 ms 23756 KB n = 3
9 Correct 14 ms 23756 KB n = 3
10 Correct 15 ms 23784 KB n = 8
11 Correct 15 ms 23716 KB n = 8
12 Correct 16 ms 23788 KB n = 8
13 Correct 15 ms 23700 KB n = 8
14 Correct 14 ms 23756 KB n = 8
15 Correct 15 ms 23896 KB n = 8
16 Correct 15 ms 23692 KB n = 8
17 Correct 15 ms 23748 KB n = 8
18 Correct 14 ms 23788 KB n = 8
19 Correct 14 ms 23684 KB n = 3
20 Correct 14 ms 23756 KB n = 7
21 Correct 14 ms 23756 KB n = 8
22 Correct 14 ms 23792 KB n = 8
23 Correct 14 ms 23756 KB n = 8
24 Correct 15 ms 23788 KB n = 8
25 Correct 14 ms 23756 KB n = 8
26 Correct 15 ms 23756 KB n = 8
27 Correct 15 ms 23756 KB n = 8
28 Correct 15 ms 23760 KB n = 8
29 Correct 15 ms 23780 KB n = 16
30 Correct 15 ms 23796 KB n = 16
31 Correct 15 ms 23784 KB n = 16
32 Correct 16 ms 23756 KB n = 16
33 Correct 16 ms 23712 KB n = 16
34 Correct 15 ms 23760 KB n = 16
35 Correct 15 ms 23788 KB n = 16
36 Correct 16 ms 23716 KB n = 15
37 Correct 15 ms 23680 KB n = 8
38 Correct 14 ms 23756 KB n = 16
39 Correct 15 ms 23756 KB n = 16
40 Correct 14 ms 23756 KB n = 9
41 Correct 16 ms 23756 KB n = 16
42 Correct 15 ms 23748 KB n = 16
43 Correct 15 ms 23720 KB n = 16
44 Correct 15 ms 23788 KB n = 9
45 Correct 16 ms 23676 KB n = 15
46 Correct 15 ms 23756 KB n = 16
47 Correct 15 ms 23756 KB n = 16
48 Correct 15 ms 23784 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 855 ms 86084 KB n = 199999
2 Correct 814 ms 86280 KB n = 199991
3 Correct 814 ms 86244 KB n = 199993
4 Correct 599 ms 72880 KB n = 152076
5 Correct 321 ms 53176 KB n = 93249
6 Correct 686 ms 76748 KB n = 199910
7 Correct 704 ms 84956 KB n = 199999
8 Correct 618 ms 77548 KB n = 199997
9 Correct 679 ms 78132 KB n = 171294
10 Correct 560 ms 70064 KB n = 140872
11 Correct 656 ms 77412 KB n = 199886
12 Correct 684 ms 85468 KB n = 199996
13 Correct 640 ms 79600 KB n = 200000
14 Correct 623 ms 87360 KB n = 199998
15 Correct 649 ms 85552 KB n = 200000
16 Correct 673 ms 87344 KB n = 199998
17 Correct 803 ms 86068 KB n = 200000
18 Correct 761 ms 83664 KB n = 190000
19 Correct 719 ms 82596 KB n = 177777
20 Correct 316 ms 55004 KB n = 100000
21 Correct 737 ms 86156 KB n = 200000
22 Correct 700 ms 86064 KB n = 200000
23 Correct 708 ms 86184 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 14 ms 23756 KB n = 2
2 Correct 14 ms 23756 KB n = 2
3 Correct 15 ms 23788 KB n = 2
4 Correct 15 ms 23792 KB n = 2
5 Correct 15 ms 23788 KB n = 2
6 Correct 14 ms 23756 KB n = 2
7 Correct 15 ms 23788 KB n = 3
8 Correct 15 ms 23756 KB n = 3
9 Correct 14 ms 23756 KB n = 3
10 Correct 15 ms 23784 KB n = 8
11 Correct 15 ms 23716 KB n = 8
12 Correct 16 ms 23788 KB n = 8
13 Correct 15 ms 23700 KB n = 8
14 Correct 14 ms 23756 KB n = 8
15 Correct 15 ms 23896 KB n = 8
16 Correct 15 ms 23692 KB n = 8
17 Correct 15 ms 23748 KB n = 8
18 Correct 14 ms 23788 KB n = 8
19 Correct 14 ms 23684 KB n = 3
20 Correct 14 ms 23756 KB n = 7
21 Correct 14 ms 23756 KB n = 8
22 Correct 14 ms 23792 KB n = 8
23 Correct 14 ms 23756 KB n = 8
24 Correct 15 ms 23788 KB n = 8
25 Correct 14 ms 23756 KB n = 8
26 Correct 15 ms 23756 KB n = 8
27 Correct 15 ms 23756 KB n = 8
28 Correct 15 ms 23760 KB n = 8
29 Correct 15 ms 23780 KB n = 16
30 Correct 15 ms 23796 KB n = 16
31 Correct 15 ms 23784 KB n = 16
32 Correct 16 ms 23756 KB n = 16
33 Correct 16 ms 23712 KB n = 16
34 Correct 15 ms 23760 KB n = 16
35 Correct 15 ms 23788 KB n = 16
36 Correct 16 ms 23716 KB n = 15
37 Correct 15 ms 23680 KB n = 8
38 Correct 14 ms 23756 KB n = 16
39 Correct 15 ms 23756 KB n = 16
40 Correct 14 ms 23756 KB n = 9
41 Correct 16 ms 23756 KB n = 16
42 Correct 15 ms 23748 KB n = 16
43 Correct 15 ms 23720 KB n = 16
44 Correct 15 ms 23788 KB n = 9
45 Correct 16 ms 23676 KB n = 15
46 Correct 15 ms 23756 KB n = 16
47 Correct 15 ms 23756 KB n = 16
48 Correct 15 ms 23784 KB n = 16
49 Correct 855 ms 86084 KB n = 199999
50 Correct 814 ms 86280 KB n = 199991
51 Correct 814 ms 86244 KB n = 199993
52 Correct 599 ms 72880 KB n = 152076
53 Correct 321 ms 53176 KB n = 93249
54 Correct 686 ms 76748 KB n = 199910
55 Correct 704 ms 84956 KB n = 199999
56 Correct 618 ms 77548 KB n = 199997
57 Correct 679 ms 78132 KB n = 171294
58 Correct 560 ms 70064 KB n = 140872
59 Correct 656 ms 77412 KB n = 199886
60 Correct 684 ms 85468 KB n = 199996
61 Correct 640 ms 79600 KB n = 200000
62 Correct 623 ms 87360 KB n = 199998
63 Correct 649 ms 85552 KB n = 200000
64 Correct 673 ms 87344 KB n = 199998
65 Correct 803 ms 86068 KB n = 200000
66 Correct 761 ms 83664 KB n = 190000
67 Correct 719 ms 82596 KB n = 177777
68 Correct 316 ms 55004 KB n = 100000
69 Correct 737 ms 86156 KB n = 200000
70 Correct 700 ms 86064 KB n = 200000
71 Correct 708 ms 86184 KB n = 200000
72 Correct 877 ms 86196 KB n = 200000
73 Correct 838 ms 86108 KB n = 200000
74 Correct 820 ms 86172 KB n = 200000
75 Correct 831 ms 86160 KB n = 200000
76 Correct 779 ms 86196 KB n = 200000
77 Correct 481 ms 61928 KB n = 200000
78 Correct 453 ms 59320 KB n = 200000
79 Correct 762 ms 81804 KB n = 184307
80 Correct 260 ms 48568 KB n = 76040
81 Correct 674 ms 77444 KB n = 199981
82 Correct 728 ms 85448 KB n = 199994
83 Correct 637 ms 79608 KB n = 199996
84 Correct 710 ms 87388 KB n = 199998
85 Correct 662 ms 85876 KB n = 200000
86 Correct 708 ms 87216 KB n = 199998
87 Correct 809 ms 86036 KB n = 200000
88 Correct 859 ms 86832 KB n = 200000
89 Correct 823 ms 88636 KB n = 200000
90 Correct 816 ms 86056 KB n = 200000
91 Correct 729 ms 85988 KB n = 200000
92 Correct 719 ms 86176 KB n = 200000