답안 #799668

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
799668 2023-07-31T18:33:27 Z kirakaminski968 Roller Coaster Railroad (IOI16_railroad) C++17
100 / 100
179 ms 22764 KB
#include "railroad.h"
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct dsu{
  int par[400005];
  void init(int N){
    for(int i = 0;i<=N;++i) par[i] = i;
  }
  int finden(int x){
    return par[x] = (par[x] == x ? x : finden(par[x]));
  }
  bool unite(int x, int y){
    x = finden(x); y = finden(y);
    if(x == y){
      return false;
    }
    par[y] = x;
    return true;
  }
}D;
struct edge{
  int start, ende, wert;
  bool operator<(const edge &e)const{
    return wert < e.wert;
  }
};
int cnt[400005];
ll plan_roller_coaster(vector<int> s, vector<int> t){
  vector<int> merged; int n = (int)s.size();
  for(int i = 0;i<n;++i) {merged.push_back(s[i]); merged.push_back(t[i]);}
  sort(merged.begin(),merged.end());
  merged.resize(unique(merged.begin(),merged.end())-merged.begin());
  D.init(merged.size());
  for(int i = 0;i<n;++i){
    s[i] = lower_bound(merged.begin(),merged.end(),s[i])-merged.begin();
    t[i] = lower_bound(merged.begin(),merged.end(),t[i])-merged.begin();
    cnt[s[i]]++; cnt[t[i]]--; D.unite(s[i],t[i]);
  }
  int cur = 1; ll ans = 0;
  vector<edge> kanten;
  for(int i = merged.size()-1;i>=0;--i){
    cur += cnt[i];
    if(cur < 0){
      ans += -1ll * cur * (merged[i]-merged[i-1]);
      cnt[i-1] += cur;
      D.unite(i-1,i);
      cur = 0;
    }
    if(cur > 0 && i) D.unite(i,i-1);
    else if(cur == 0) kanten.push_back({i-1,i,merged[i]-merged[i-1]});
  }
  sort(kanten.begin(),kanten.end());
  for(auto p : kanten){
    if(D.unite(p.start,p.ende)) ans += p.wert;
  }
  return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB n = 2
2 Correct 1 ms 212 KB n = 2
3 Correct 1 ms 212 KB n = 2
4 Correct 1 ms 212 KB n = 2
5 Correct 1 ms 212 KB n = 2
6 Correct 1 ms 308 KB n = 2
7 Correct 1 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 1 ms 212 KB n = 3
10 Correct 1 ms 304 KB n = 8
11 Correct 1 ms 312 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 1 ms 308 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 312 KB n = 8
19 Correct 1 ms 300 KB n = 3
20 Correct 1 ms 308 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 1 ms 308 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB n = 2
2 Correct 1 ms 212 KB n = 2
3 Correct 1 ms 212 KB n = 2
4 Correct 1 ms 212 KB n = 2
5 Correct 1 ms 212 KB n = 2
6 Correct 1 ms 308 KB n = 2
7 Correct 1 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 1 ms 212 KB n = 3
10 Correct 1 ms 304 KB n = 8
11 Correct 1 ms 312 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 1 ms 308 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 312 KB n = 8
19 Correct 1 ms 300 KB n = 3
20 Correct 1 ms 308 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 1 ms 308 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
26 Correct 1 ms 308 KB n = 8
27 Correct 1 ms 212 KB n = 8
28 Correct 0 ms 308 KB n = 8
29 Correct 1 ms 212 KB n = 16
30 Correct 0 ms 212 KB n = 16
31 Correct 1 ms 308 KB n = 16
32 Correct 1 ms 212 KB n = 16
33 Correct 1 ms 212 KB n = 16
34 Correct 1 ms 212 KB n = 16
35 Correct 0 ms 308 KB n = 16
36 Correct 1 ms 212 KB n = 15
37 Correct 0 ms 212 KB n = 8
38 Correct 1 ms 284 KB n = 16
39 Correct 1 ms 212 KB n = 16
40 Correct 1 ms 212 KB n = 9
41 Correct 1 ms 308 KB n = 16
42 Correct 0 ms 212 KB n = 16
43 Correct 1 ms 304 KB n = 16
44 Correct 0 ms 212 KB n = 9
45 Correct 0 ms 212 KB n = 15
46 Correct 1 ms 212 KB n = 16
47 Correct 1 ms 212 KB n = 16
48 Correct 1 ms 212 KB n = 16
# 결과 실행 시간 메모리 Grader output
1 Correct 118 ms 8572 KB n = 199999
2 Correct 160 ms 16140 KB n = 199991
3 Correct 179 ms 16152 KB n = 199993
4 Correct 102 ms 6716 KB n = 152076
5 Correct 52 ms 5880 KB n = 93249
6 Correct 110 ms 10424 KB n = 199910
7 Correct 109 ms 11224 KB n = 199999
8 Correct 107 ms 10420 KB n = 199997
9 Correct 104 ms 10300 KB n = 171294
10 Correct 81 ms 8556 KB n = 140872
11 Correct 113 ms 10428 KB n = 199886
12 Correct 112 ms 11936 KB n = 199996
13 Correct 108 ms 11196 KB n = 200000
14 Correct 121 ms 15676 KB n = 199998
15 Correct 123 ms 15664 KB n = 200000
16 Correct 130 ms 16076 KB n = 199998
17 Correct 150 ms 22752 KB n = 200000
18 Correct 124 ms 16164 KB n = 190000
19 Correct 101 ms 10752 KB n = 177777
20 Correct 60 ms 6336 KB n = 100000
21 Correct 116 ms 12080 KB n = 200000
22 Correct 137 ms 16604 KB n = 200000
23 Correct 139 ms 16608 KB n = 200000
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB n = 2
2 Correct 1 ms 212 KB n = 2
3 Correct 1 ms 212 KB n = 2
4 Correct 1 ms 212 KB n = 2
5 Correct 1 ms 212 KB n = 2
6 Correct 1 ms 308 KB n = 2
7 Correct 1 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 1 ms 212 KB n = 3
10 Correct 1 ms 304 KB n = 8
11 Correct 1 ms 312 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 1 ms 308 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 1 ms 312 KB n = 8
19 Correct 1 ms 300 KB n = 3
20 Correct 1 ms 308 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 1 ms 308 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
26 Correct 1 ms 308 KB n = 8
27 Correct 1 ms 212 KB n = 8
28 Correct 0 ms 308 KB n = 8
29 Correct 1 ms 212 KB n = 16
30 Correct 0 ms 212 KB n = 16
31 Correct 1 ms 308 KB n = 16
32 Correct 1 ms 212 KB n = 16
33 Correct 1 ms 212 KB n = 16
34 Correct 1 ms 212 KB n = 16
35 Correct 0 ms 308 KB n = 16
36 Correct 1 ms 212 KB n = 15
37 Correct 0 ms 212 KB n = 8
38 Correct 1 ms 284 KB n = 16
39 Correct 1 ms 212 KB n = 16
40 Correct 1 ms 212 KB n = 9
41 Correct 1 ms 308 KB n = 16
42 Correct 0 ms 212 KB n = 16
43 Correct 1 ms 304 KB n = 16
44 Correct 0 ms 212 KB n = 9
45 Correct 0 ms 212 KB n = 15
46 Correct 1 ms 212 KB n = 16
47 Correct 1 ms 212 KB n = 16
48 Correct 1 ms 212 KB n = 16
49 Correct 118 ms 8572 KB n = 199999
50 Correct 160 ms 16140 KB n = 199991
51 Correct 179 ms 16152 KB n = 199993
52 Correct 102 ms 6716 KB n = 152076
53 Correct 52 ms 5880 KB n = 93249
54 Correct 110 ms 10424 KB n = 199910
55 Correct 109 ms 11224 KB n = 199999
56 Correct 107 ms 10420 KB n = 199997
57 Correct 104 ms 10300 KB n = 171294
58 Correct 81 ms 8556 KB n = 140872
59 Correct 113 ms 10428 KB n = 199886
60 Correct 112 ms 11936 KB n = 199996
61 Correct 108 ms 11196 KB n = 200000
62 Correct 121 ms 15676 KB n = 199998
63 Correct 123 ms 15664 KB n = 200000
64 Correct 130 ms 16076 KB n = 199998
65 Correct 150 ms 22752 KB n = 200000
66 Correct 124 ms 16164 KB n = 190000
67 Correct 101 ms 10752 KB n = 177777
68 Correct 60 ms 6336 KB n = 100000
69 Correct 116 ms 12080 KB n = 200000
70 Correct 137 ms 16604 KB n = 200000
71 Correct 139 ms 16608 KB n = 200000
72 Correct 124 ms 12080 KB n = 200000
73 Correct 132 ms 14772 KB n = 200000
74 Correct 160 ms 19664 KB n = 200000
75 Correct 149 ms 19644 KB n = 200000
76 Correct 116 ms 12100 KB n = 200000
77 Correct 101 ms 10564 KB n = 200000
78 Correct 126 ms 15020 KB n = 200000
79 Correct 108 ms 10940 KB n = 184307
80 Correct 42 ms 4840 KB n = 76040
81 Correct 112 ms 10464 KB n = 199981
82 Correct 112 ms 11952 KB n = 199994
83 Correct 118 ms 11196 KB n = 199996
84 Correct 121 ms 15760 KB n = 199998
85 Correct 122 ms 15796 KB n = 200000
86 Correct 130 ms 16044 KB n = 199998
87 Correct 155 ms 22764 KB n = 200000
88 Correct 147 ms 16948 KB n = 200000
89 Correct 113 ms 12084 KB n = 200000
90 Correct 115 ms 12092 KB n = 200000
91 Correct 138 ms 16564 KB n = 200000
92 Correct 135 ms 16616 KB n = 200000