답안 #272947

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
272947 2020-08-18T21:29:59 Z ipaljak Roller Coaster Railroad (IOI16_railroad) C++14
100 / 100
1228 ms 63520 KB
#include "railroad.h"

#include <bits/stdc++.h>

using namespace std;

#define TRACE(x) cerr << #x << " " << x << endl
#define _ << " " <<

using llint = long long;

int n, m;
llint sol;

vector<int> v;
unordered_map<int, int> deg, dad, open;

int find(int x) {
  if (dad.find(x) == dad.end()) return dad[x] = x;
  if (dad[x] == x) return x;
  return dad[x] = find(dad[x]);
}

void unite(int x, int y) {
  if (rand() % 2)
    dad[find(x)] = find(y);
  else
    dad[find(y)] = find(x);
}

llint plan_roller_coaster(vector<int> s, vector<int> t) {
  srand(time(NULL));
  m = (int)s.size();
  for (int i = 0; i < m; ++i) {
    v.emplace_back(s[i]);
    v.emplace_back(t[i]);
  }

  sort(v.begin(), v.end());
  v.erase(unique(v.begin(), v.end()), v.end());

  n = (int)v.size();
  s.emplace_back(v[n - 1]);
  t.emplace_back(v[0]);
  ++m;

  for (int i = 0; i < m; ++i) {
    deg[s[i]]++; deg[t[i]]--;
    unite(s[i], t[i]);
  }

  vector<pair<int, int>> e;
  for (int i = 0; i < n - 1; ++i) {
    if (i != 0) open[v[i]] = open[v[i - 1]];
    open[v[i]] += deg[v[i]];
    if (open[v[i]] == 0) {
      e.emplace_back(v[i], v[i + 1]);
      continue;
    }
    unite(v[i], v[i + 1]);
    if (open[v[i]] > 0)
      sol += (llint) open[v[i]] * (v[i + 1] - v[i]);
  }

  sort(e.begin(), e.end(),
       [](const pair<int, int> &A, const pair<int, int> &B) {
         return A.second - A.first < B.second - B.first;
       });

  for (const auto &p : e) {
    if (find(p.first) == find(p.second)) continue;
    sol += (llint) p.second - p.first;
    unite(p.first, p.second);
  }

  return sol;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 2
2 Correct 1 ms 256 KB n = 2
3 Correct 1 ms 256 KB n = 2
4 Correct 1 ms 256 KB n = 2
5 Correct 0 ms 256 KB n = 2
6 Correct 1 ms 256 KB n = 2
7 Correct 1 ms 256 KB n = 3
8 Correct 1 ms 256 KB n = 3
9 Correct 0 ms 256 KB n = 3
10 Correct 1 ms 256 KB n = 8
11 Correct 1 ms 256 KB n = 8
12 Correct 0 ms 256 KB n = 8
13 Correct 0 ms 256 KB n = 8
14 Correct 0 ms 256 KB n = 8
15 Correct 1 ms 256 KB n = 8
16 Correct 0 ms 256 KB n = 8
17 Correct 1 ms 256 KB n = 8
18 Correct 1 ms 256 KB n = 8
19 Correct 1 ms 256 KB n = 3
20 Correct 0 ms 256 KB n = 7
21 Correct 0 ms 256 KB n = 8
22 Correct 0 ms 256 KB n = 8
23 Correct 1 ms 256 KB n = 8
24 Correct 1 ms 256 KB n = 8
25 Correct 1 ms 256 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 2
2 Correct 1 ms 256 KB n = 2
3 Correct 1 ms 256 KB n = 2
4 Correct 1 ms 256 KB n = 2
5 Correct 0 ms 256 KB n = 2
6 Correct 1 ms 256 KB n = 2
7 Correct 1 ms 256 KB n = 3
8 Correct 1 ms 256 KB n = 3
9 Correct 0 ms 256 KB n = 3
10 Correct 1 ms 256 KB n = 8
11 Correct 1 ms 256 KB n = 8
12 Correct 0 ms 256 KB n = 8
13 Correct 0 ms 256 KB n = 8
14 Correct 0 ms 256 KB n = 8
15 Correct 1 ms 256 KB n = 8
16 Correct 0 ms 256 KB n = 8
17 Correct 1 ms 256 KB n = 8
18 Correct 1 ms 256 KB n = 8
19 Correct 1 ms 256 KB n = 3
20 Correct 0 ms 256 KB n = 7
21 Correct 0 ms 256 KB n = 8
22 Correct 0 ms 256 KB n = 8
23 Correct 1 ms 256 KB n = 8
24 Correct 1 ms 256 KB n = 8
25 Correct 1 ms 256 KB n = 8
26 Correct 1 ms 256 KB n = 8
27 Correct 1 ms 256 KB n = 8
28 Correct 1 ms 256 KB n = 8
29 Correct 0 ms 256 KB n = 16
30 Correct 1 ms 256 KB n = 16
31 Correct 1 ms 256 KB n = 16
32 Correct 1 ms 256 KB n = 16
33 Correct 0 ms 256 KB n = 16
34 Correct 1 ms 256 KB n = 16
35 Correct 0 ms 256 KB n = 16
36 Correct 0 ms 256 KB n = 15
37 Correct 0 ms 256 KB n = 8
38 Correct 0 ms 256 KB n = 16
39 Correct 0 ms 256 KB n = 16
40 Correct 1 ms 256 KB n = 9
41 Correct 0 ms 256 KB n = 16
42 Correct 0 ms 256 KB n = 16
43 Correct 1 ms 256 KB n = 16
44 Correct 0 ms 256 KB n = 9
45 Correct 0 ms 256 KB n = 15
46 Correct 0 ms 256 KB n = 16
47 Correct 0 ms 256 KB n = 16
48 Correct 0 ms 256 KB n = 16
# 결과 실행 시간 메모리 Grader output
1 Correct 1129 ms 54968 KB n = 199999
2 Correct 1175 ms 55064 KB n = 199991
3 Correct 1200 ms 54968 KB n = 199993
4 Correct 1048 ms 45356 KB n = 152076
5 Correct 517 ms 26196 KB n = 93249
6 Correct 626 ms 48284 KB n = 199910
7 Correct 811 ms 55324 KB n = 199999
8 Correct 614 ms 49564 KB n = 199997
9 Correct 925 ms 49148 KB n = 171294
10 Correct 773 ms 43860 KB n = 140872
11 Correct 582 ms 48924 KB n = 199886
12 Correct 792 ms 58908 KB n = 199996
13 Correct 614 ms 54056 KB n = 200000
14 Correct 879 ms 61996 KB n = 199998
15 Correct 863 ms 60232 KB n = 200000
16 Correct 1084 ms 61588 KB n = 199998
17 Correct 1036 ms 63512 KB n = 200000
18 Correct 944 ms 56780 KB n = 190000
19 Correct 858 ms 57676 KB n = 177777
20 Correct 411 ms 29476 KB n = 100000
21 Correct 1000 ms 58648 KB n = 200000
22 Correct 1215 ms 60316 KB n = 200000
23 Correct 1189 ms 60324 KB n = 200000
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB n = 2
2 Correct 1 ms 256 KB n = 2
3 Correct 1 ms 256 KB n = 2
4 Correct 1 ms 256 KB n = 2
5 Correct 0 ms 256 KB n = 2
6 Correct 1 ms 256 KB n = 2
7 Correct 1 ms 256 KB n = 3
8 Correct 1 ms 256 KB n = 3
9 Correct 0 ms 256 KB n = 3
10 Correct 1 ms 256 KB n = 8
11 Correct 1 ms 256 KB n = 8
12 Correct 0 ms 256 KB n = 8
13 Correct 0 ms 256 KB n = 8
14 Correct 0 ms 256 KB n = 8
15 Correct 1 ms 256 KB n = 8
16 Correct 0 ms 256 KB n = 8
17 Correct 1 ms 256 KB n = 8
18 Correct 1 ms 256 KB n = 8
19 Correct 1 ms 256 KB n = 3
20 Correct 0 ms 256 KB n = 7
21 Correct 0 ms 256 KB n = 8
22 Correct 0 ms 256 KB n = 8
23 Correct 1 ms 256 KB n = 8
24 Correct 1 ms 256 KB n = 8
25 Correct 1 ms 256 KB n = 8
26 Correct 1 ms 256 KB n = 8
27 Correct 1 ms 256 KB n = 8
28 Correct 1 ms 256 KB n = 8
29 Correct 0 ms 256 KB n = 16
30 Correct 1 ms 256 KB n = 16
31 Correct 1 ms 256 KB n = 16
32 Correct 1 ms 256 KB n = 16
33 Correct 0 ms 256 KB n = 16
34 Correct 1 ms 256 KB n = 16
35 Correct 0 ms 256 KB n = 16
36 Correct 0 ms 256 KB n = 15
37 Correct 0 ms 256 KB n = 8
38 Correct 0 ms 256 KB n = 16
39 Correct 0 ms 256 KB n = 16
40 Correct 1 ms 256 KB n = 9
41 Correct 0 ms 256 KB n = 16
42 Correct 0 ms 256 KB n = 16
43 Correct 1 ms 256 KB n = 16
44 Correct 0 ms 256 KB n = 9
45 Correct 0 ms 256 KB n = 15
46 Correct 0 ms 256 KB n = 16
47 Correct 0 ms 256 KB n = 16
48 Correct 0 ms 256 KB n = 16
49 Correct 1129 ms 54968 KB n = 199999
50 Correct 1175 ms 55064 KB n = 199991
51 Correct 1200 ms 54968 KB n = 199993
52 Correct 1048 ms 45356 KB n = 152076
53 Correct 517 ms 26196 KB n = 93249
54 Correct 626 ms 48284 KB n = 199910
55 Correct 811 ms 55324 KB n = 199999
56 Correct 614 ms 49564 KB n = 199997
57 Correct 925 ms 49148 KB n = 171294
58 Correct 773 ms 43860 KB n = 140872
59 Correct 582 ms 48924 KB n = 199886
60 Correct 792 ms 58908 KB n = 199996
61 Correct 614 ms 54056 KB n = 200000
62 Correct 879 ms 61996 KB n = 199998
63 Correct 863 ms 60232 KB n = 200000
64 Correct 1084 ms 61588 KB n = 199998
65 Correct 1036 ms 63512 KB n = 200000
66 Correct 944 ms 56780 KB n = 190000
67 Correct 858 ms 57676 KB n = 177777
68 Correct 411 ms 29476 KB n = 100000
69 Correct 1000 ms 58648 KB n = 200000
70 Correct 1215 ms 60316 KB n = 200000
71 Correct 1189 ms 60324 KB n = 200000
72 Correct 1194 ms 58704 KB n = 200000
73 Correct 1228 ms 58644 KB n = 200000
74 Correct 1205 ms 58668 KB n = 200000
75 Correct 922 ms 58780 KB n = 200000
76 Correct 939 ms 58704 KB n = 200000
77 Correct 458 ms 38472 KB n = 200000
78 Correct 510 ms 35528 KB n = 200000
79 Correct 988 ms 54996 KB n = 184307
80 Correct 341 ms 24028 KB n = 76040
81 Correct 582 ms 51356 KB n = 199981
82 Correct 828 ms 58908 KB n = 199994
83 Correct 635 ms 54048 KB n = 199996
84 Correct 956 ms 61984 KB n = 199998
85 Correct 871 ms 60320 KB n = 200000
86 Correct 1026 ms 61596 KB n = 199998
87 Correct 978 ms 63516 KB n = 200000
88 Correct 1012 ms 59808 KB n = 200000
89 Correct 967 ms 63520 KB n = 200000
90 Correct 1014 ms 58808 KB n = 200000
91 Correct 1228 ms 60572 KB n = 200000
92 Correct 1214 ms 60232 KB n = 200000