#include "parks.h"
#include <bits/stdc++.h>
#define all(x) x.begin(), x.end()
using namespace std;
const int N_MAX = 2e5 + 11;
struct point{
int x, y;
bool operator< (const point& o) const {
return x < o.x || (x == o.x && y < o.y);
}
};
struct edge{
int u, v;
};
int n;
map<point, int> mp;
vector<point> a;
struct DSU{
int dsu[N_MAX];
void init(int n){
for(int i = 0; i < n; i++) dsu[i] = i;
}
int f(int x){ return x == dsu[x] ? x : dsu[x] = f(dsu[x]); }
void g(int x, int y){ x = f(x), y = f(y); dsu[x] = y; }
} dsu;
vector<edge> construct_tree(){
vector<edge> ans;
dsu.init(n);
for(int i = 0; i < n; i++){
for(auto [dx, dy] : vector<pair<int, int>>{{0, -2}, {0, 2}, {2, 0}, {-2, 0}}){
int nx = a[i].x + dx, ny = a[i].y + dy;
if(mp.count({nx, ny})){
int v = mp[{nx, ny}];
if(dsu.f(i) != dsu.f(v)){
dsu.g(i, v);
ans.push_back({i, v});
}
}
}
}
return ans;
}
vector<point> adj(int u, int v){
assert(abs(a[u].x - a[v].x) + abs(a[u].y - a[v].y) == 2);
if(a[u].x == a[v].x) return {{a[u].x - 1, (a[u].y + a[v].y) / 2}, {a[u].x + 1, (a[u].y + a[v].y) / 2}};
else return {{(a[u].x + a[v].x) / 2, a[v].y - 1}, {(a[u].x + a[v].x) / 2, a[v].y + 1}};
}
vector<point> assign_benches(vector<edge> roads){
vector<point> ans(roads.size());
map<point, vector<int>> deg;
for(int i = 0; i < (int) roads.size(); i++){
int u = roads[i].u, v = roads[i].v;
vector<point> p = adj(u, v);
deg[p[0]].push_back(i);
deg[p[1]].push_back(i);
}
vector<point> deg_0, deg_1;
for(auto [p, v] : deg){
if(v.size() == 0) deg_0.push_back(p);
if(v.size() == 1) deg_1.push_back(p);
}
while(deg.size()){
while(deg_0.size()) deg.erase(deg_0.back()), deg_0.pop_back();
while(deg_1.size()){
point v = deg_1.back(); deg_1.pop_back();
if(deg[v].size() != 1) continue;
int r = deg[v][0];
ans[r] = v;
int a = roads[r].u, b = roads[r].v;
vector<point> p = adj(a, b);
deg[p[0]].erase(find(all(deg[p[0]]), r));
deg[p[1]].erase(find(all(deg[p[1]]), r));
if(deg[p[0]].size() == 0) deg_0.push_back(p[0]);
if(deg[p[0]].size() == 1) deg_1.push_back(p[0]);
if(deg[p[1]].size() == 0) deg_0.push_back(p[1]);
if(deg[p[1]].size() == 1) deg_1.push_back(p[1]);
}
if(deg.size()){
auto [c, v] = *deg.begin(); deg.erase(deg.begin());
if(v.empty()) continue;
int r = v[0];
ans[r] = c;
int a = roads[r].u, b = roads[r].v;
vector<point> p = adj(a, b);
deg[p[0]].erase(find(all(deg[p[0]]), r));
deg[p[1]].erase(find(all(deg[p[1]]), r));
if(deg[p[0]].size() == 0) deg_0.push_back(p[0]);
if(deg[p[0]].size() == 1) deg_1.push_back(p[0]);
if(deg[p[1]].size() == 0) deg_0.push_back(p[1]);
if(deg[p[1]].size() == 1) deg_1.push_back(p[1]);
}
}
return ans;
}
int construct_roads(vector<int> x, vector<int> y) {
n = x.size();
for(int i = 0; i < n; i++){
a.push_back({x[i], y[i]});
mp[a[i]] = i;
}
vector<edge> edges = construct_tree();
if((int) edges.size() < n - 1) return 0;
vector<point> benches = assign_benches(edges);
vector<int> u(n - 1), v(n - 1), a(n - 1), b(n - 1);
for(int i = 0; i < n - 1; i++){
u[i] = edges[i].u, v[i] = edges[i].v;
a[i] = benches[i].x, b[i] = benches[i].y;
}
build(u, v, a, b);
return 1;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
336 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
419 ms |
38188 KB |
Output is correct |
10 |
Correct |
24 ms |
4088 KB |
Output is correct |
11 |
Correct |
173 ms |
20500 KB |
Output is correct |
12 |
Correct |
47 ms |
5844 KB |
Output is correct |
13 |
Correct |
34 ms |
5068 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
2 ms |
468 KB |
Output is correct |
16 |
Correct |
389 ms |
38172 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
336 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
419 ms |
38188 KB |
Output is correct |
10 |
Correct |
24 ms |
4088 KB |
Output is correct |
11 |
Correct |
173 ms |
20500 KB |
Output is correct |
12 |
Correct |
47 ms |
5844 KB |
Output is correct |
13 |
Correct |
34 ms |
5068 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
2 ms |
468 KB |
Output is correct |
16 |
Correct |
389 ms |
38172 KB |
Output is correct |
17 |
Correct |
1 ms |
212 KB |
Output is correct |
18 |
Correct |
0 ms |
212 KB |
Output is correct |
19 |
Correct |
1 ms |
336 KB |
Output is correct |
20 |
Correct |
0 ms |
212 KB |
Output is correct |
21 |
Correct |
0 ms |
212 KB |
Output is correct |
22 |
Correct |
1 ms |
212 KB |
Output is correct |
23 |
Correct |
934 ms |
54716 KB |
Output is correct |
24 |
Correct |
1 ms |
212 KB |
Output is correct |
25 |
Correct |
3 ms |
596 KB |
Output is correct |
26 |
Correct |
3 ms |
596 KB |
Output is correct |
27 |
Correct |
4 ms |
596 KB |
Output is correct |
28 |
Correct |
277 ms |
22552 KB |
Output is correct |
29 |
Correct |
446 ms |
33272 KB |
Output is correct |
30 |
Correct |
697 ms |
44892 KB |
Output is correct |
31 |
Correct |
936 ms |
54696 KB |
Output is correct |
32 |
Correct |
0 ms |
212 KB |
Output is correct |
33 |
Correct |
1 ms |
212 KB |
Output is correct |
34 |
Correct |
0 ms |
212 KB |
Output is correct |
35 |
Correct |
0 ms |
212 KB |
Output is correct |
36 |
Correct |
0 ms |
212 KB |
Output is correct |
37 |
Correct |
0 ms |
212 KB |
Output is correct |
38 |
Correct |
0 ms |
212 KB |
Output is correct |
39 |
Correct |
0 ms |
212 KB |
Output is correct |
40 |
Correct |
0 ms |
212 KB |
Output is correct |
41 |
Correct |
0 ms |
212 KB |
Output is correct |
42 |
Correct |
0 ms |
212 KB |
Output is correct |
43 |
Correct |
2 ms |
468 KB |
Output is correct |
44 |
Correct |
3 ms |
596 KB |
Output is correct |
45 |
Correct |
421 ms |
29528 KB |
Output is correct |
46 |
Correct |
603 ms |
43152 KB |
Output is correct |
47 |
Correct |
622 ms |
43188 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
336 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
419 ms |
38188 KB |
Output is correct |
10 |
Correct |
24 ms |
4088 KB |
Output is correct |
11 |
Correct |
173 ms |
20500 KB |
Output is correct |
12 |
Correct |
47 ms |
5844 KB |
Output is correct |
13 |
Correct |
34 ms |
5068 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
2 ms |
468 KB |
Output is correct |
16 |
Correct |
389 ms |
38172 KB |
Output is correct |
17 |
Correct |
1 ms |
212 KB |
Output is correct |
18 |
Correct |
0 ms |
212 KB |
Output is correct |
19 |
Correct |
1 ms |
336 KB |
Output is correct |
20 |
Correct |
0 ms |
212 KB |
Output is correct |
21 |
Correct |
0 ms |
212 KB |
Output is correct |
22 |
Correct |
1 ms |
212 KB |
Output is correct |
23 |
Correct |
934 ms |
54716 KB |
Output is correct |
24 |
Correct |
1 ms |
212 KB |
Output is correct |
25 |
Correct |
3 ms |
596 KB |
Output is correct |
26 |
Correct |
3 ms |
596 KB |
Output is correct |
27 |
Correct |
4 ms |
596 KB |
Output is correct |
28 |
Correct |
277 ms |
22552 KB |
Output is correct |
29 |
Correct |
446 ms |
33272 KB |
Output is correct |
30 |
Correct |
697 ms |
44892 KB |
Output is correct |
31 |
Correct |
936 ms |
54696 KB |
Output is correct |
32 |
Correct |
0 ms |
212 KB |
Output is correct |
33 |
Correct |
1 ms |
212 KB |
Output is correct |
34 |
Correct |
0 ms |
212 KB |
Output is correct |
35 |
Correct |
0 ms |
212 KB |
Output is correct |
36 |
Correct |
0 ms |
212 KB |
Output is correct |
37 |
Correct |
0 ms |
212 KB |
Output is correct |
38 |
Correct |
0 ms |
212 KB |
Output is correct |
39 |
Correct |
0 ms |
212 KB |
Output is correct |
40 |
Correct |
0 ms |
212 KB |
Output is correct |
41 |
Correct |
0 ms |
212 KB |
Output is correct |
42 |
Correct |
0 ms |
212 KB |
Output is correct |
43 |
Correct |
2 ms |
468 KB |
Output is correct |
44 |
Correct |
3 ms |
596 KB |
Output is correct |
45 |
Correct |
421 ms |
29528 KB |
Output is correct |
46 |
Correct |
603 ms |
43152 KB |
Output is correct |
47 |
Correct |
622 ms |
43188 KB |
Output is correct |
48 |
Correct |
0 ms |
212 KB |
Output is correct |
49 |
Correct |
0 ms |
212 KB |
Output is correct |
50 |
Correct |
0 ms |
212 KB |
Output is correct |
51 |
Runtime error |
1 ms |
340 KB |
Execution killed with signal 11 |
52 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
336 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
419 ms |
38188 KB |
Output is correct |
10 |
Correct |
24 ms |
4088 KB |
Output is correct |
11 |
Correct |
173 ms |
20500 KB |
Output is correct |
12 |
Correct |
47 ms |
5844 KB |
Output is correct |
13 |
Correct |
34 ms |
5068 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
2 ms |
468 KB |
Output is correct |
16 |
Correct |
389 ms |
38172 KB |
Output is correct |
17 |
Correct |
1 ms |
212 KB |
Output is correct |
18 |
Correct |
0 ms |
212 KB |
Output is correct |
19 |
Correct |
0 ms |
212 KB |
Output is correct |
20 |
Correct |
801 ms |
47936 KB |
Output is correct |
21 |
Correct |
835 ms |
48112 KB |
Output is correct |
22 |
Correct |
801 ms |
47932 KB |
Output is correct |
23 |
Correct |
727 ms |
65684 KB |
Output is correct |
24 |
Correct |
286 ms |
18236 KB |
Output is correct |
25 |
Correct |
394 ms |
21308 KB |
Output is correct |
26 |
Correct |
345 ms |
21368 KB |
Output is correct |
27 |
Correct |
990 ms |
76096 KB |
Output is correct |
28 |
Correct |
974 ms |
75992 KB |
Output is correct |
29 |
Correct |
969 ms |
75928 KB |
Output is correct |
30 |
Correct |
986 ms |
75992 KB |
Output is correct |
31 |
Correct |
0 ms |
212 KB |
Output is correct |
32 |
Runtime error |
40 ms |
8444 KB |
Execution killed with signal 11 |
33 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
336 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
419 ms |
38188 KB |
Output is correct |
10 |
Correct |
24 ms |
4088 KB |
Output is correct |
11 |
Correct |
173 ms |
20500 KB |
Output is correct |
12 |
Correct |
47 ms |
5844 KB |
Output is correct |
13 |
Correct |
34 ms |
5068 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
2 ms |
468 KB |
Output is correct |
16 |
Correct |
389 ms |
38172 KB |
Output is correct |
17 |
Correct |
890 ms |
76092 KB |
Output is correct |
18 |
Runtime error |
943 ms |
148256 KB |
Execution killed with signal 11 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
336 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
419 ms |
38188 KB |
Output is correct |
10 |
Correct |
24 ms |
4088 KB |
Output is correct |
11 |
Correct |
173 ms |
20500 KB |
Output is correct |
12 |
Correct |
47 ms |
5844 KB |
Output is correct |
13 |
Correct |
34 ms |
5068 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
2 ms |
468 KB |
Output is correct |
16 |
Correct |
389 ms |
38172 KB |
Output is correct |
17 |
Correct |
1 ms |
212 KB |
Output is correct |
18 |
Correct |
0 ms |
212 KB |
Output is correct |
19 |
Correct |
1 ms |
336 KB |
Output is correct |
20 |
Correct |
0 ms |
212 KB |
Output is correct |
21 |
Correct |
0 ms |
212 KB |
Output is correct |
22 |
Correct |
1 ms |
212 KB |
Output is correct |
23 |
Correct |
934 ms |
54716 KB |
Output is correct |
24 |
Correct |
1 ms |
212 KB |
Output is correct |
25 |
Correct |
3 ms |
596 KB |
Output is correct |
26 |
Correct |
3 ms |
596 KB |
Output is correct |
27 |
Correct |
4 ms |
596 KB |
Output is correct |
28 |
Correct |
277 ms |
22552 KB |
Output is correct |
29 |
Correct |
446 ms |
33272 KB |
Output is correct |
30 |
Correct |
697 ms |
44892 KB |
Output is correct |
31 |
Correct |
936 ms |
54696 KB |
Output is correct |
32 |
Correct |
0 ms |
212 KB |
Output is correct |
33 |
Correct |
1 ms |
212 KB |
Output is correct |
34 |
Correct |
0 ms |
212 KB |
Output is correct |
35 |
Correct |
0 ms |
212 KB |
Output is correct |
36 |
Correct |
0 ms |
212 KB |
Output is correct |
37 |
Correct |
0 ms |
212 KB |
Output is correct |
38 |
Correct |
0 ms |
212 KB |
Output is correct |
39 |
Correct |
0 ms |
212 KB |
Output is correct |
40 |
Correct |
0 ms |
212 KB |
Output is correct |
41 |
Correct |
0 ms |
212 KB |
Output is correct |
42 |
Correct |
0 ms |
212 KB |
Output is correct |
43 |
Correct |
2 ms |
468 KB |
Output is correct |
44 |
Correct |
3 ms |
596 KB |
Output is correct |
45 |
Correct |
421 ms |
29528 KB |
Output is correct |
46 |
Correct |
603 ms |
43152 KB |
Output is correct |
47 |
Correct |
622 ms |
43188 KB |
Output is correct |
48 |
Correct |
0 ms |
212 KB |
Output is correct |
49 |
Correct |
0 ms |
212 KB |
Output is correct |
50 |
Correct |
0 ms |
212 KB |
Output is correct |
51 |
Runtime error |
1 ms |
340 KB |
Execution killed with signal 11 |
52 |
Halted |
0 ms |
0 KB |
- |