Submission #292542

# Submission time Handle Problem Language Result Execution time Memory
292542 2020-09-07T08:57:16 Z amoo_safar Roller Coaster Railroad (IOI16_railroad) C++17
100 / 100
300 ms 24416 KB
#include "railroad.h"

#include <bits/stdc++.h>

#define pb push_back
#define all(x) x.begin(), x.end()
#define int ll

using namespace std;

typedef long long ll;

const int N = 4e5 + 10;

int par[N];
int Find(int u){
	if(par[u] == u) return u;
	return par[u] = Find(par[u]);
}
bool Unite(int u, int v){
	//cerr << "# " << u << ' ' << v << '\n';
	u = Find(u); v = Find(v);
	if(u == v) return false;
	par[u] = v;
	return true;
}
int deg[N];
ll plan_roller_coaster(vector<int32_t> s, vector<int32_t> t){
	int n = s.size();
	
	iota(par, par + N, 0);
	vector<int> V;
	for(auto x : s) V.pb(x);
	for(auto x : t) V.pb(x);
	
	V.pb(0);
	V.pb(1e9 + 1);
	sort(all(V));
	V.resize(unique(all(V)) - V.begin());
	int m = V.size();
	for(auto &x : s) x = lower_bound(all(V), x) - V.begin();
	for(auto &x : t) x = lower_bound(all(V), x) - V.begin();
	for(auto x : s) deg[x] ++;
	for(auto x : t) deg[x] --;
	
	for(int i = 0; i < n; i++) Unite(s[i], t[i]);
	//for(int i = 0; i < n; i++) cerr << s[i] << ' ' << t[i] << '\n';

	vector< pair<int, int> > E;
	deg[0] --;
	deg[m - 1]++;
	
	
	ll ans = 0;
	for(int i = 0; i + 1 < m; i++){
		int cnt = -deg[i];
		if(cnt == 0) continue;
		Unite(i, i + 1);
		//cerr << i << ' ' << i + 1 << '\n';
		deg[i + 1] += deg[i];
		if(cnt < 0)
			ans += abs(cnt) * (V[i + 1] - V[i]);
	}
	for(int i = 0; i + 1 < m; i++){
		E.pb({V[i + 1] - V[i], i});
	}
	assert(deg[m - 1] == 0);
	sort(all(E));
	for(auto [w, i] : E){
		if(Unite(i, i + 1)){
			ans += w;
			//cerr << "$$ " << w << '\n';
		}
	}
	return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3456 KB n = 2
2 Correct 2 ms 3456 KB n = 2
3 Correct 2 ms 3456 KB n = 2
4 Correct 2 ms 3456 KB n = 2
5 Correct 2 ms 3456 KB n = 2
6 Correct 2 ms 3456 KB n = 2
7 Correct 2 ms 3456 KB n = 3
8 Correct 2 ms 3456 KB n = 3
9 Correct 2 ms 3456 KB n = 3
10 Correct 2 ms 3584 KB n = 8
11 Correct 2 ms 3456 KB n = 8
12 Correct 3 ms 3456 KB n = 8
13 Correct 2 ms 3456 KB n = 8
14 Correct 2 ms 3456 KB n = 8
15 Correct 2 ms 3456 KB n = 8
16 Correct 3 ms 3456 KB n = 8
17 Correct 2 ms 3456 KB n = 8
18 Correct 2 ms 3456 KB n = 8
19 Correct 2 ms 3456 KB n = 3
20 Correct 2 ms 3456 KB n = 7
21 Correct 2 ms 3456 KB n = 8
22 Correct 3 ms 3456 KB n = 8
23 Correct 2 ms 3456 KB n = 8
24 Correct 2 ms 3456 KB n = 8
25 Correct 2 ms 3456 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3456 KB n = 2
2 Correct 2 ms 3456 KB n = 2
3 Correct 2 ms 3456 KB n = 2
4 Correct 2 ms 3456 KB n = 2
5 Correct 2 ms 3456 KB n = 2
6 Correct 2 ms 3456 KB n = 2
7 Correct 2 ms 3456 KB n = 3
8 Correct 2 ms 3456 KB n = 3
9 Correct 2 ms 3456 KB n = 3
10 Correct 2 ms 3584 KB n = 8
11 Correct 2 ms 3456 KB n = 8
12 Correct 3 ms 3456 KB n = 8
13 Correct 2 ms 3456 KB n = 8
14 Correct 2 ms 3456 KB n = 8
15 Correct 2 ms 3456 KB n = 8
16 Correct 3 ms 3456 KB n = 8
17 Correct 2 ms 3456 KB n = 8
18 Correct 2 ms 3456 KB n = 8
19 Correct 2 ms 3456 KB n = 3
20 Correct 2 ms 3456 KB n = 7
21 Correct 2 ms 3456 KB n = 8
22 Correct 3 ms 3456 KB n = 8
23 Correct 2 ms 3456 KB n = 8
24 Correct 2 ms 3456 KB n = 8
25 Correct 2 ms 3456 KB n = 8
26 Correct 2 ms 3456 KB n = 8
27 Correct 2 ms 3456 KB n = 8
28 Correct 2 ms 3456 KB n = 8
29 Correct 2 ms 3456 KB n = 16
30 Correct 2 ms 3456 KB n = 16
31 Correct 2 ms 3456 KB n = 16
32 Correct 2 ms 3456 KB n = 16
33 Correct 2 ms 3456 KB n = 16
34 Correct 2 ms 3456 KB n = 16
35 Correct 2 ms 3456 KB n = 16
36 Correct 2 ms 3456 KB n = 15
37 Correct 2 ms 3456 KB n = 8
38 Correct 2 ms 3456 KB n = 16
39 Correct 2 ms 3456 KB n = 16
40 Correct 2 ms 3456 KB n = 9
41 Correct 2 ms 3456 KB n = 16
42 Correct 3 ms 3456 KB n = 16
43 Correct 2 ms 3456 KB n = 16
44 Correct 2 ms 3456 KB n = 9
45 Correct 2 ms 3456 KB n = 15
46 Correct 2 ms 3456 KB n = 16
47 Correct 2 ms 3456 KB n = 16
48 Correct 2 ms 3456 KB n = 16
# Verdict Execution time Memory Grader output
1 Correct 292 ms 21344 KB n = 199999
2 Correct 300 ms 21216 KB n = 199991
3 Correct 292 ms 21344 KB n = 199993
4 Correct 213 ms 19040 KB n = 152076
5 Correct 128 ms 12136 KB n = 93249
6 Correct 242 ms 20764 KB n = 199910
7 Correct 268 ms 21176 KB n = 199999
8 Correct 242 ms 20680 KB n = 199997
9 Correct 245 ms 19808 KB n = 171294
10 Correct 196 ms 18400 KB n = 140872
11 Correct 247 ms 20704 KB n = 199886
12 Correct 265 ms 21120 KB n = 199996
13 Correct 245 ms 20832 KB n = 200000
14 Correct 262 ms 21088 KB n = 199998
15 Correct 261 ms 21088 KB n = 200000
16 Correct 282 ms 21216 KB n = 199998
17 Correct 274 ms 24288 KB n = 200000
18 Correct 260 ms 20960 KB n = 190000
19 Correct 238 ms 22880 KB n = 177777
20 Correct 134 ms 12392 KB n = 100000
21 Correct 282 ms 21220 KB n = 200000
22 Correct 276 ms 21248 KB n = 200000
23 Correct 257 ms 21216 KB n = 200000
# Verdict Execution time Memory Grader output
1 Correct 2 ms 3456 KB n = 2
2 Correct 2 ms 3456 KB n = 2
3 Correct 2 ms 3456 KB n = 2
4 Correct 2 ms 3456 KB n = 2
5 Correct 2 ms 3456 KB n = 2
6 Correct 2 ms 3456 KB n = 2
7 Correct 2 ms 3456 KB n = 3
8 Correct 2 ms 3456 KB n = 3
9 Correct 2 ms 3456 KB n = 3
10 Correct 2 ms 3584 KB n = 8
11 Correct 2 ms 3456 KB n = 8
12 Correct 3 ms 3456 KB n = 8
13 Correct 2 ms 3456 KB n = 8
14 Correct 2 ms 3456 KB n = 8
15 Correct 2 ms 3456 KB n = 8
16 Correct 3 ms 3456 KB n = 8
17 Correct 2 ms 3456 KB n = 8
18 Correct 2 ms 3456 KB n = 8
19 Correct 2 ms 3456 KB n = 3
20 Correct 2 ms 3456 KB n = 7
21 Correct 2 ms 3456 KB n = 8
22 Correct 3 ms 3456 KB n = 8
23 Correct 2 ms 3456 KB n = 8
24 Correct 2 ms 3456 KB n = 8
25 Correct 2 ms 3456 KB n = 8
26 Correct 2 ms 3456 KB n = 8
27 Correct 2 ms 3456 KB n = 8
28 Correct 2 ms 3456 KB n = 8
29 Correct 2 ms 3456 KB n = 16
30 Correct 2 ms 3456 KB n = 16
31 Correct 2 ms 3456 KB n = 16
32 Correct 2 ms 3456 KB n = 16
33 Correct 2 ms 3456 KB n = 16
34 Correct 2 ms 3456 KB n = 16
35 Correct 2 ms 3456 KB n = 16
36 Correct 2 ms 3456 KB n = 15
37 Correct 2 ms 3456 KB n = 8
38 Correct 2 ms 3456 KB n = 16
39 Correct 2 ms 3456 KB n = 16
40 Correct 2 ms 3456 KB n = 9
41 Correct 2 ms 3456 KB n = 16
42 Correct 3 ms 3456 KB n = 16
43 Correct 2 ms 3456 KB n = 16
44 Correct 2 ms 3456 KB n = 9
45 Correct 2 ms 3456 KB n = 15
46 Correct 2 ms 3456 KB n = 16
47 Correct 2 ms 3456 KB n = 16
48 Correct 2 ms 3456 KB n = 16
49 Correct 292 ms 21344 KB n = 199999
50 Correct 300 ms 21216 KB n = 199991
51 Correct 292 ms 21344 KB n = 199993
52 Correct 213 ms 19040 KB n = 152076
53 Correct 128 ms 12136 KB n = 93249
54 Correct 242 ms 20764 KB n = 199910
55 Correct 268 ms 21176 KB n = 199999
56 Correct 242 ms 20680 KB n = 199997
57 Correct 245 ms 19808 KB n = 171294
58 Correct 196 ms 18400 KB n = 140872
59 Correct 247 ms 20704 KB n = 199886
60 Correct 265 ms 21120 KB n = 199996
61 Correct 245 ms 20832 KB n = 200000
62 Correct 262 ms 21088 KB n = 199998
63 Correct 261 ms 21088 KB n = 200000
64 Correct 282 ms 21216 KB n = 199998
65 Correct 274 ms 24288 KB n = 200000
66 Correct 260 ms 20960 KB n = 190000
67 Correct 238 ms 22880 KB n = 177777
68 Correct 134 ms 12392 KB n = 100000
69 Correct 282 ms 21220 KB n = 200000
70 Correct 276 ms 21248 KB n = 200000
71 Correct 257 ms 21216 KB n = 200000
72 Correct 294 ms 21216 KB n = 200000
73 Correct 296 ms 21208 KB n = 200000
74 Correct 290 ms 21268 KB n = 200000
75 Correct 281 ms 21184 KB n = 200000
76 Correct 266 ms 21344 KB n = 200000
77 Correct 219 ms 17752 KB n = 200000
78 Correct 218 ms 17504 KB n = 200000
79 Correct 268 ms 20448 KB n = 184307
80 Correct 106 ms 11308 KB n = 76040
81 Correct 242 ms 20660 KB n = 199981
82 Correct 268 ms 21088 KB n = 199994
83 Correct 248 ms 20832 KB n = 199996
84 Correct 262 ms 21220 KB n = 199998
85 Correct 259 ms 21088 KB n = 200000
86 Correct 278 ms 21216 KB n = 199998
87 Correct 265 ms 24288 KB n = 200000
88 Correct 274 ms 21816 KB n = 200000
89 Correct 266 ms 24416 KB n = 200000
90 Correct 281 ms 21220 KB n = 200000
91 Correct 275 ms 21252 KB n = 200000
92 Correct 260 ms 21216 KB n = 200000