#include <bits/stdc++.h>
using namespace std;
map<pair<int, int>, int> vid;
int di[2] = {2, 0};
int dj[2] = {0, 2};
struct edge {
int i1, j1, i2, j2;
};
vector<edge> edges;
const int N = 2e5+6;
struct DSU {
int p[N]={};
int sz[N];
DSU() {
iota(p, p+N, 0);
fill(sz, sz+N, 1);
}
int get(int a) {
return p[a] = (a == p[a] ? a : get(p[a]));
}
void merge(int a, int b) {
int x = get(a), y = get(b);
if (x == y) return;
if (sz[x] > sz[y]) swap(x, y);
p[x] = y;
sz[y] += sz[x];
}
};
vector<edge> horizontal, vertical;
void build(vector<int> u, vector<int> v, vector<int> a, vector<int> b);
bool try_build() {
//0 - up(hor) (from road: -1;+1)
//1 - down(hor) (from road: +1;+1)
//2 - left(ver) (from road: +1;-1)
//3 - right(ver)(from road: +1;+1)
vector<int> tlx = {-1, 1, 1, 1};
vector<int> tly = {1, 1, -1, 1};
vector<int> dx = {0, 0, 2, 2};
vector<int> dy = {2, 2, 0, 0};
map<pair<int, int>, int> bench_dir;
for (const auto& e : horizontal) {
bench_dir[{e.i1-1, e.j1+1}] = 0;
}
auto sieve_down = [&] (int bi, int bj) -> void {
bench_dir.erase({bi, bj});
bi += 2;
while (bench_dir.count({bi, bj})) {
bench_dir[{bi, bj}] = 1;
bi += 2;
}
bench_dir[{bi, bj}] = 1;
};
for (const auto& e : vertical) {
int wi_left = e.i1+1;
int wj_left = e.j1-1;
int wi_right = e.i1+1;
int wj_right = e.j1+1;
if (bench_dir.count({wi_left, wj_left})) {
if (!bench_dir.count({wi_right, wj_right})) {
bench_dir[{wi_right, wj_right}] = 3;
continue;
}
int prev_dir = bench_dir[{wi_left, wj_left}];
if (prev_dir == 0) {
sieve_down(wi_left, wj_left);
bench_dir[{wi_left, wj_left}] = 2;
continue;
}
if (prev_dir == 1 || prev_dir == 3) {
int prev_dir2 = bench_dir[{wi_right, wj_right}];
if (prev_dir2 == 1) {
return false;
}
}
sieve_down(wi_right, wj_right);
bench_dir[{wi_right, wj_right}] = 3;
}
else {
bench_dir[{wi_left, wj_left}] = 2;
}
}
map<array<int, 4>, pair<int, int>> road_to_bench;
for (const auto& [x, y] : bench_dir) {
int tx = x.first-tlx[y];
int ty = x.second-tly[y];
int bx = tx+dx[y];
int by = ty+dy[y];
road_to_bench[{tx, ty, bx, by}] = {x.first, x.second};
}
vector<int> u, v, a, b;
for (const auto& e : horizontal) {
u.push_back(vid[{e.i1, e.j1}]);
v.push_back(vid[{e.i2, e.j2}]);
a.push_back(road_to_bench[{e.i1, e.j1, e.i2, e.j2}].first);
b.push_back(road_to_bench[{e.i1, e.j1, e.i2, e.j2}].second);
}
for (const auto& e : vertical) {
u.push_back(vid[{e.i1, e.j1}]);
v.push_back(vid[{e.i2, e.j2}]);
a.push_back(road_to_bench[{e.i1, e.j1, e.i2, e.j2}].first);
b.push_back(road_to_bench[{e.i1, e.j1, e.i2, e.j2}].second);
}
build(u, v, a, b);
return true;
}
int construct_roads(vector<int> x, vector<int> y) {
const int n = x.size();
for (int i = 0; i < n; ++i) {
vid[{x[i], y[i]}] = i;
}
vector<edge> all_vert;
vector<edge> all_hor;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < 2; ++j) {
int ni = x[i] + di[j];
int nj = y[i] + dj[j];
auto it = vid.find({ni, nj});
if (it == vid.end()) continue;
edges.push_back({x[i], y[i], ni, nj});
bool hor = ni == x[i];
if (!hor) all_vert.push_back({x[i], y[i], ni, nj});
else all_hor.push_back({x[i], y[i], ni, nj});
}
}
for (int z = 0; z < 12; ++z) {
random_shuffle(all_hor.begin(), all_hor.end());
random_shuffle(all_vert.begin(), all_vert.end());
vertical.clear();
horizontal.clear();
DSU d;
for (const edge& e : all_vert) {
int id1 = vid[{e.i1, e.j1}];
int id2 = vid[{e.i2, e.j2}];
if (d.get(id1) == d.get(id2)) continue;
d.merge(id1, id2);
vertical.push_back(e);
}
for (const edge& e : all_hor) {
bool hor = e.i1 == e.i2;
int id1 = vid[{e.i1, e.j1}];
int id2 = vid[{e.i2, e.j2}];
if (d.get(id1) == d.get(id2)) continue;
d.merge(id1, id2);
horizontal.push_back(e);
}
if (d.sz[d.get(0)] != n) return 0;
sort(vertical.begin(), vertical.end(), [&](const edge& a, const edge& b) {
if (a.i1 != b.i1) return a.i1 < b.i1;
return a.j1 < b.j1;
});
int j = try_build();
if (j == 1) return true;
}
return false;
}
Compilation message
parks.cpp: In function 'int construct_roads(std::vector<int>, std::vector<int>)':
parks.cpp:156:18: warning: unused variable 'hor' [-Wunused-variable]
156 | bool hor = e.i1 == e.i2;
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1880 KB |
Output is correct |
2 |
Correct |
1 ms |
1884 KB |
Output is correct |
3 |
Correct |
1 ms |
1884 KB |
Output is correct |
4 |
Correct |
1 ms |
1884 KB |
Output is correct |
5 |
Correct |
1 ms |
1884 KB |
Output is correct |
6 |
Correct |
1 ms |
1884 KB |
Output is correct |
7 |
Correct |
1 ms |
1884 KB |
Output is correct |
8 |
Correct |
1 ms |
1884 KB |
Output is correct |
9 |
Correct |
274 ms |
32076 KB |
Output is correct |
10 |
Correct |
18 ms |
5080 KB |
Output is correct |
11 |
Correct |
122 ms |
17980 KB |
Output is correct |
12 |
Correct |
28 ms |
6376 KB |
Output is correct |
13 |
Correct |
42 ms |
8376 KB |
Output is correct |
14 |
Correct |
2 ms |
2140 KB |
Output is correct |
15 |
Correct |
3 ms |
2140 KB |
Output is correct |
16 |
Correct |
266 ms |
31916 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1880 KB |
Output is correct |
2 |
Correct |
1 ms |
1884 KB |
Output is correct |
3 |
Correct |
1 ms |
1884 KB |
Output is correct |
4 |
Correct |
1 ms |
1884 KB |
Output is correct |
5 |
Correct |
1 ms |
1884 KB |
Output is correct |
6 |
Correct |
1 ms |
1884 KB |
Output is correct |
7 |
Correct |
1 ms |
1884 KB |
Output is correct |
8 |
Correct |
1 ms |
1884 KB |
Output is correct |
9 |
Correct |
274 ms |
32076 KB |
Output is correct |
10 |
Correct |
18 ms |
5080 KB |
Output is correct |
11 |
Correct |
122 ms |
17980 KB |
Output is correct |
12 |
Correct |
28 ms |
6376 KB |
Output is correct |
13 |
Correct |
42 ms |
8376 KB |
Output is correct |
14 |
Correct |
2 ms |
2140 KB |
Output is correct |
15 |
Correct |
3 ms |
2140 KB |
Output is correct |
16 |
Correct |
266 ms |
31916 KB |
Output is correct |
17 |
Correct |
1 ms |
1884 KB |
Output is correct |
18 |
Correct |
1 ms |
1884 KB |
Output is correct |
19 |
Correct |
1 ms |
1884 KB |
Output is correct |
20 |
Correct |
1 ms |
1884 KB |
Output is correct |
21 |
Correct |
1 ms |
1884 KB |
Output is correct |
22 |
Correct |
1 ms |
1884 KB |
Output is correct |
23 |
Correct |
679 ms |
65252 KB |
Output is correct |
24 |
Correct |
2 ms |
1880 KB |
Output is correct |
25 |
Correct |
3 ms |
2396 KB |
Output is correct |
26 |
Correct |
4 ms |
2536 KB |
Output is correct |
27 |
Correct |
5 ms |
2652 KB |
Output is correct |
28 |
Correct |
221 ms |
27532 KB |
Output is correct |
29 |
Correct |
399 ms |
40604 KB |
Output is correct |
30 |
Correct |
573 ms |
53804 KB |
Output is correct |
31 |
Correct |
759 ms |
66092 KB |
Output is correct |
32 |
Correct |
1 ms |
1880 KB |
Output is correct |
33 |
Correct |
1 ms |
1880 KB |
Output is correct |
34 |
Correct |
1 ms |
1836 KB |
Output is correct |
35 |
Correct |
1 ms |
1884 KB |
Output is correct |
36 |
Correct |
1 ms |
1884 KB |
Output is correct |
37 |
Correct |
2 ms |
1892 KB |
Output is correct |
38 |
Correct |
1 ms |
1880 KB |
Output is correct |
39 |
Correct |
1 ms |
1884 KB |
Output is correct |
40 |
Correct |
2 ms |
1884 KB |
Output is correct |
41 |
Correct |
1 ms |
1884 KB |
Output is correct |
42 |
Correct |
1 ms |
1844 KB |
Output is correct |
43 |
Correct |
2 ms |
2296 KB |
Output is correct |
44 |
Correct |
3 ms |
2396 KB |
Output is correct |
45 |
Correct |
262 ms |
32100 KB |
Output is correct |
46 |
Correct |
467 ms |
48168 KB |
Output is correct |
47 |
Correct |
437 ms |
47124 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1880 KB |
Output is correct |
2 |
Correct |
1 ms |
1884 KB |
Output is correct |
3 |
Correct |
1 ms |
1884 KB |
Output is correct |
4 |
Correct |
1 ms |
1884 KB |
Output is correct |
5 |
Correct |
1 ms |
1884 KB |
Output is correct |
6 |
Correct |
1 ms |
1884 KB |
Output is correct |
7 |
Correct |
1 ms |
1884 KB |
Output is correct |
8 |
Correct |
1 ms |
1884 KB |
Output is correct |
9 |
Correct |
274 ms |
32076 KB |
Output is correct |
10 |
Correct |
18 ms |
5080 KB |
Output is correct |
11 |
Correct |
122 ms |
17980 KB |
Output is correct |
12 |
Correct |
28 ms |
6376 KB |
Output is correct |
13 |
Correct |
42 ms |
8376 KB |
Output is correct |
14 |
Correct |
2 ms |
2140 KB |
Output is correct |
15 |
Correct |
3 ms |
2140 KB |
Output is correct |
16 |
Correct |
266 ms |
31916 KB |
Output is correct |
17 |
Correct |
1 ms |
1884 KB |
Output is correct |
18 |
Correct |
1 ms |
1884 KB |
Output is correct |
19 |
Correct |
1 ms |
1884 KB |
Output is correct |
20 |
Correct |
1 ms |
1884 KB |
Output is correct |
21 |
Correct |
1 ms |
1884 KB |
Output is correct |
22 |
Correct |
1 ms |
1884 KB |
Output is correct |
23 |
Correct |
679 ms |
65252 KB |
Output is correct |
24 |
Correct |
2 ms |
1880 KB |
Output is correct |
25 |
Correct |
3 ms |
2396 KB |
Output is correct |
26 |
Correct |
4 ms |
2536 KB |
Output is correct |
27 |
Correct |
5 ms |
2652 KB |
Output is correct |
28 |
Correct |
221 ms |
27532 KB |
Output is correct |
29 |
Correct |
399 ms |
40604 KB |
Output is correct |
30 |
Correct |
573 ms |
53804 KB |
Output is correct |
31 |
Correct |
759 ms |
66092 KB |
Output is correct |
32 |
Correct |
1 ms |
1880 KB |
Output is correct |
33 |
Correct |
1 ms |
1880 KB |
Output is correct |
34 |
Correct |
1 ms |
1836 KB |
Output is correct |
35 |
Correct |
1 ms |
1884 KB |
Output is correct |
36 |
Correct |
1 ms |
1884 KB |
Output is correct |
37 |
Correct |
2 ms |
1892 KB |
Output is correct |
38 |
Correct |
1 ms |
1880 KB |
Output is correct |
39 |
Correct |
1 ms |
1884 KB |
Output is correct |
40 |
Correct |
2 ms |
1884 KB |
Output is correct |
41 |
Correct |
1 ms |
1884 KB |
Output is correct |
42 |
Correct |
1 ms |
1844 KB |
Output is correct |
43 |
Correct |
2 ms |
2296 KB |
Output is correct |
44 |
Correct |
3 ms |
2396 KB |
Output is correct |
45 |
Correct |
262 ms |
32100 KB |
Output is correct |
46 |
Correct |
467 ms |
48168 KB |
Output is correct |
47 |
Correct |
437 ms |
47124 KB |
Output is correct |
48 |
Correct |
1 ms |
1884 KB |
Output is correct |
49 |
Correct |
1 ms |
1884 KB |
Output is correct |
50 |
Correct |
1 ms |
1884 KB |
Output is correct |
51 |
Correct |
1 ms |
1884 KB |
Output is correct |
52 |
Correct |
1 ms |
1844 KB |
Output is correct |
53 |
Correct |
1 ms |
1884 KB |
Output is correct |
54 |
Correct |
1 ms |
1884 KB |
Output is correct |
55 |
Incorrect |
3160 ms |
44472 KB |
Solution announced impossible, but it is possible. |
56 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1880 KB |
Output is correct |
2 |
Correct |
1 ms |
1884 KB |
Output is correct |
3 |
Correct |
1 ms |
1884 KB |
Output is correct |
4 |
Correct |
1 ms |
1884 KB |
Output is correct |
5 |
Correct |
1 ms |
1884 KB |
Output is correct |
6 |
Correct |
1 ms |
1884 KB |
Output is correct |
7 |
Correct |
1 ms |
1884 KB |
Output is correct |
8 |
Correct |
1 ms |
1884 KB |
Output is correct |
9 |
Correct |
274 ms |
32076 KB |
Output is correct |
10 |
Correct |
18 ms |
5080 KB |
Output is correct |
11 |
Correct |
122 ms |
17980 KB |
Output is correct |
12 |
Correct |
28 ms |
6376 KB |
Output is correct |
13 |
Correct |
42 ms |
8376 KB |
Output is correct |
14 |
Correct |
2 ms |
2140 KB |
Output is correct |
15 |
Correct |
3 ms |
2140 KB |
Output is correct |
16 |
Correct |
266 ms |
31916 KB |
Output is correct |
17 |
Correct |
1 ms |
1884 KB |
Output is correct |
18 |
Correct |
2 ms |
1884 KB |
Output is correct |
19 |
Correct |
1 ms |
1884 KB |
Output is correct |
20 |
Correct |
582 ms |
66736 KB |
Output is correct |
21 |
Correct |
599 ms |
64480 KB |
Output is correct |
22 |
Correct |
594 ms |
65688 KB |
Output is correct |
23 |
Correct |
412 ms |
54580 KB |
Output is correct |
24 |
Correct |
154 ms |
17576 KB |
Output is correct |
25 |
Correct |
348 ms |
31160 KB |
Output is correct |
26 |
Correct |
257 ms |
31144 KB |
Output is correct |
27 |
Correct |
636 ms |
63280 KB |
Output is correct |
28 |
Correct |
684 ms |
62392 KB |
Output is correct |
29 |
Correct |
561 ms |
62764 KB |
Output is correct |
30 |
Correct |
576 ms |
63020 KB |
Output is correct |
31 |
Correct |
1 ms |
1884 KB |
Output is correct |
32 |
Correct |
27 ms |
6420 KB |
Output is correct |
33 |
Correct |
69 ms |
9752 KB |
Output is correct |
34 |
Correct |
612 ms |
64348 KB |
Output is correct |
35 |
Correct |
10 ms |
3236 KB |
Output is correct |
36 |
Correct |
58 ms |
8744 KB |
Output is correct |
37 |
Correct |
127 ms |
15412 KB |
Output is correct |
38 |
Incorrect |
636 ms |
15164 KB |
Solution announced impossible, but it is possible. |
39 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1880 KB |
Output is correct |
2 |
Correct |
1 ms |
1884 KB |
Output is correct |
3 |
Correct |
1 ms |
1884 KB |
Output is correct |
4 |
Correct |
1 ms |
1884 KB |
Output is correct |
5 |
Correct |
1 ms |
1884 KB |
Output is correct |
6 |
Correct |
1 ms |
1884 KB |
Output is correct |
7 |
Correct |
1 ms |
1884 KB |
Output is correct |
8 |
Correct |
1 ms |
1884 KB |
Output is correct |
9 |
Correct |
274 ms |
32076 KB |
Output is correct |
10 |
Correct |
18 ms |
5080 KB |
Output is correct |
11 |
Correct |
122 ms |
17980 KB |
Output is correct |
12 |
Correct |
28 ms |
6376 KB |
Output is correct |
13 |
Correct |
42 ms |
8376 KB |
Output is correct |
14 |
Correct |
2 ms |
2140 KB |
Output is correct |
15 |
Correct |
3 ms |
2140 KB |
Output is correct |
16 |
Correct |
266 ms |
31916 KB |
Output is correct |
17 |
Correct |
556 ms |
64744 KB |
Output is correct |
18 |
Correct |
559 ms |
65380 KB |
Output is correct |
19 |
Correct |
578 ms |
64996 KB |
Output is correct |
20 |
Correct |
612 ms |
63504 KB |
Output is correct |
21 |
Correct |
504 ms |
56844 KB |
Output is correct |
22 |
Correct |
1 ms |
1880 KB |
Output is correct |
23 |
Correct |
82 ms |
11732 KB |
Output is correct |
24 |
Correct |
22 ms |
4688 KB |
Output is correct |
25 |
Correct |
90 ms |
11572 KB |
Output is correct |
26 |
Correct |
171 ms |
19128 KB |
Output is correct |
27 |
Correct |
400 ms |
33468 KB |
Output is correct |
28 |
Correct |
652 ms |
42044 KB |
Output is correct |
29 |
Correct |
1062 ms |
50136 KB |
Output is correct |
30 |
Correct |
982 ms |
57320 KB |
Output is correct |
31 |
Correct |
1024 ms |
65080 KB |
Output is correct |
32 |
Correct |
649 ms |
64748 KB |
Output is correct |
33 |
Correct |
665 ms |
63656 KB |
Output is correct |
34 |
Correct |
5 ms |
2648 KB |
Output is correct |
35 |
Correct |
8 ms |
3200 KB |
Output is correct |
36 |
Correct |
262 ms |
32424 KB |
Output is correct |
37 |
Correct |
437 ms |
48932 KB |
Output is correct |
38 |
Correct |
657 ms |
63212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
1880 KB |
Output is correct |
2 |
Correct |
1 ms |
1884 KB |
Output is correct |
3 |
Correct |
1 ms |
1884 KB |
Output is correct |
4 |
Correct |
1 ms |
1884 KB |
Output is correct |
5 |
Correct |
1 ms |
1884 KB |
Output is correct |
6 |
Correct |
1 ms |
1884 KB |
Output is correct |
7 |
Correct |
1 ms |
1884 KB |
Output is correct |
8 |
Correct |
1 ms |
1884 KB |
Output is correct |
9 |
Correct |
274 ms |
32076 KB |
Output is correct |
10 |
Correct |
18 ms |
5080 KB |
Output is correct |
11 |
Correct |
122 ms |
17980 KB |
Output is correct |
12 |
Correct |
28 ms |
6376 KB |
Output is correct |
13 |
Correct |
42 ms |
8376 KB |
Output is correct |
14 |
Correct |
2 ms |
2140 KB |
Output is correct |
15 |
Correct |
3 ms |
2140 KB |
Output is correct |
16 |
Correct |
266 ms |
31916 KB |
Output is correct |
17 |
Correct |
1 ms |
1884 KB |
Output is correct |
18 |
Correct |
1 ms |
1884 KB |
Output is correct |
19 |
Correct |
1 ms |
1884 KB |
Output is correct |
20 |
Correct |
1 ms |
1884 KB |
Output is correct |
21 |
Correct |
1 ms |
1884 KB |
Output is correct |
22 |
Correct |
1 ms |
1884 KB |
Output is correct |
23 |
Correct |
679 ms |
65252 KB |
Output is correct |
24 |
Correct |
2 ms |
1880 KB |
Output is correct |
25 |
Correct |
3 ms |
2396 KB |
Output is correct |
26 |
Correct |
4 ms |
2536 KB |
Output is correct |
27 |
Correct |
5 ms |
2652 KB |
Output is correct |
28 |
Correct |
221 ms |
27532 KB |
Output is correct |
29 |
Correct |
399 ms |
40604 KB |
Output is correct |
30 |
Correct |
573 ms |
53804 KB |
Output is correct |
31 |
Correct |
759 ms |
66092 KB |
Output is correct |
32 |
Correct |
1 ms |
1880 KB |
Output is correct |
33 |
Correct |
1 ms |
1880 KB |
Output is correct |
34 |
Correct |
1 ms |
1836 KB |
Output is correct |
35 |
Correct |
1 ms |
1884 KB |
Output is correct |
36 |
Correct |
1 ms |
1884 KB |
Output is correct |
37 |
Correct |
2 ms |
1892 KB |
Output is correct |
38 |
Correct |
1 ms |
1880 KB |
Output is correct |
39 |
Correct |
1 ms |
1884 KB |
Output is correct |
40 |
Correct |
2 ms |
1884 KB |
Output is correct |
41 |
Correct |
1 ms |
1884 KB |
Output is correct |
42 |
Correct |
1 ms |
1844 KB |
Output is correct |
43 |
Correct |
2 ms |
2296 KB |
Output is correct |
44 |
Correct |
3 ms |
2396 KB |
Output is correct |
45 |
Correct |
262 ms |
32100 KB |
Output is correct |
46 |
Correct |
467 ms |
48168 KB |
Output is correct |
47 |
Correct |
437 ms |
47124 KB |
Output is correct |
48 |
Correct |
1 ms |
1884 KB |
Output is correct |
49 |
Correct |
1 ms |
1884 KB |
Output is correct |
50 |
Correct |
1 ms |
1884 KB |
Output is correct |
51 |
Correct |
1 ms |
1884 KB |
Output is correct |
52 |
Correct |
1 ms |
1844 KB |
Output is correct |
53 |
Correct |
1 ms |
1884 KB |
Output is correct |
54 |
Correct |
1 ms |
1884 KB |
Output is correct |
55 |
Incorrect |
3160 ms |
44472 KB |
Solution announced impossible, but it is possible. |
56 |
Halted |
0 ms |
0 KB |
- |