#include "parks.h"
#include <bits/stdc++.h>
#include <unistd.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,popcnt,sse4")
#define pii pair<int,int>
#define fs first
#define sc second
#define _all(T) T.begin(),T.end()
const int mxn = 2e5+10;
int N;
int S;
struct DSU{
int dsu[mxn];
DSU(){
iota(dsu,dsu+mxn,0);
}
int root(int k){
return k == dsu[k]?k:dsu[k] = root(dsu[k]);
}
void onion(int a,int b){
dsu[root(a)] = root(b);
}
};
DSU dsu;
vector<int> ans[4];
void addans(int s,int e,int x,int y){
dsu.onion(s,e);
ans[0].push_back(s);
ans[1].push_back(e);
ans[2].push_back(x);
ans[3].push_back(y);
return;
}
map<pii,int> mp;
vector<pii> edges;
vector<pii> all;
void check(int a,int b){
if(dsu.root(a) == dsu.root(b))return;
edges.push_back(pii(a,b));
dsu.onion(a,b);
return;
}
vector<int> lef[mxn],rig[mxn*2];
int mx[mxn],my[mxn*2];
int deg[mxn*6];
bitset<mxn> done;
int construct_roads(std::vector<int> x, std::vector<int> y) {
S = clock();
if (x.size() == 1) {
build({}, {}, {}, {});
return 1;
}
N = x.size();
for(int i = 0;i<N;i++){
pii pos = pii(x[i],y[i]);
if(mp.find(pii(pos.fs-2,pos.sc)) != mp.end())check(mp[pii(pos.fs-2,pos.sc)],i);
if(mp.find(pii(pos.fs+2,pos.sc)) != mp.end())check(mp[pii(pos.fs+2,pos.sc)],i);
if(mp.find(pii(pos.fs,pos.sc-2)) != mp.end())check(mp[pii(pos.fs,pos.sc-2)],i);
if(mp.find(pii(pos.fs,pos.sc+2)) != mp.end())check(mp[pii(pos.fs,pos.sc+2)],i);
mp[pos] = i;
}
if(edges.size() != N-1)return 0;
for(int i = 0;i<edges.size();i++){
auto [s,e] = edges[i];
if(x[s]>x[e])swap(s,e);
if(x[s] == x[e]&&y[s]>y[e])swap(s,e);
if(x[s] == x[e]){
all.push_back(pii(x[s]-1,(y[s]+y[e])>>1));
all.push_back(pii(x[s]+1,(y[s]+y[e])>>1));
}
else if(y[s] == y[e]){
all.push_back(pii((x[s]+x[e])>>1,y[s]-1));
all.push_back(pii((x[s]+x[e])>>1,y[s]+1));
}
}
//cerr<<"EDGES: ";for(auto [s,e]:edges)cerr<<s<<' '<<e<<endl;
sort(all.begin(),all.end());all.erase(unique(all.begin(),all.end()),all.end());
for(int i = 0;i<edges.size();i++){
auto [s,e] = edges[i];
if(x[s] == x[e]){
int p = lower_bound(_all(all),pii(x[s]-1,(y[s]+y[e])>>1))-all.begin();
rig[p].push_back(i);
deg[p]++;
lef[i].push_back(p);
p = lower_bound(_all(all),pii(x[s]+1,(y[s]+y[e])>>1))-all.begin();
rig[p].push_back(i);
deg[p]++;
lef[i].push_back(p);
}
else if(y[s] == y[e]){
int p = lower_bound(_all(all),pii((x[s]+x[e])>>1,y[s]-1))-all.begin();
deg[p]++;
rig[p].push_back(i);
lef[i].push_back(p);
p = lower_bound(_all(all),pii((x[s]+x[e])>>1,y[s]+1))-all.begin();
rig[p].push_back(i);
deg[p]++;
lef[i].push_back(p);
}
}
queue<int> q;
for(int i = 0;i<all.size();i++){
if(deg[i] == 1)q.push(i);
}
memset(mx,-1,sizeof(mx));
memset(my,-1,sizeof(my));
while(!q.empty()){
auto now = q.front();
q.pop();
int tar = -1;
for(auto nxt:rig[now]){
if(mx[nxt] == -1)tar = nxt;
}
if(tar == -1)continue;
mx[tar] = now;
my[now] = tar;
for(auto nxt:lef[tar]){
deg[nxt]--;
if(deg[nxt] == 1)q.push(nxt);
}
}
for(int i = 0;i<edges.size();i++){
if(!mx[i])continue;
for(auto nxt:lef[i]){
if(my[nxt] == -1){
my[nxt] = i;
mx[i] = nxt;
}
}
}
for(int i = 0;i<edges.size();i++){
if(mx[i] == -1)return 0;
int tar = mx[i];
addans(edges[i].fs,edges[i].sc,all[tar].fs,all[tar].sc);
}
build(ans[0],ans[1],ans[2],ans[3]);
return 1;
}
Compilation message
parks.cpp: In function 'int construct_roads(std::vector<int>, std::vector<int>)':
parks.cpp:75:18: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
75 | if(edges.size() != N-1)return 0;
| ~~~~~~~~~~~~~^~~~~~
parks.cpp:76:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
76 | for(int i = 0;i<edges.size();i++){
| ~^~~~~~~~~~~~~
parks.cpp:91:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
91 | for(int i = 0;i<edges.size();i++){
| ~^~~~~~~~~~~~~
parks.cpp:116:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
116 | for(int i = 0;i<all.size();i++){
| ~^~~~~~~~~~~
parks.cpp:139:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
139 | for(int i = 0;i<edges.size();i++){
| ~^~~~~~~~~~~~~
parks.cpp:148:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
148 | for(int i = 0;i<edges.size();i++){
| ~^~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
15212 KB |
Output is correct |
2 |
Correct |
9 ms |
17500 KB |
Output is correct |
3 |
Correct |
7 ms |
15196 KB |
Output is correct |
4 |
Correct |
11 ms |
17500 KB |
Output is correct |
5 |
Correct |
7 ms |
17500 KB |
Output is correct |
6 |
Correct |
7 ms |
15196 KB |
Output is correct |
7 |
Correct |
8 ms |
15196 KB |
Output is correct |
8 |
Correct |
7 ms |
15192 KB |
Output is correct |
9 |
Correct |
189 ms |
45228 KB |
Output is correct |
10 |
Correct |
29 ms |
20448 KB |
Output is correct |
11 |
Correct |
70 ms |
33192 KB |
Output is correct |
12 |
Correct |
30 ms |
21968 KB |
Output is correct |
13 |
Correct |
31 ms |
19404 KB |
Output is correct |
14 |
Correct |
7 ms |
15196 KB |
Output is correct |
15 |
Correct |
7 ms |
15424 KB |
Output is correct |
16 |
Correct |
191 ms |
45440 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
15212 KB |
Output is correct |
2 |
Correct |
9 ms |
17500 KB |
Output is correct |
3 |
Correct |
7 ms |
15196 KB |
Output is correct |
4 |
Correct |
11 ms |
17500 KB |
Output is correct |
5 |
Correct |
7 ms |
17500 KB |
Output is correct |
6 |
Correct |
7 ms |
15196 KB |
Output is correct |
7 |
Correct |
8 ms |
15196 KB |
Output is correct |
8 |
Correct |
7 ms |
15192 KB |
Output is correct |
9 |
Correct |
189 ms |
45228 KB |
Output is correct |
10 |
Correct |
29 ms |
20448 KB |
Output is correct |
11 |
Correct |
70 ms |
33192 KB |
Output is correct |
12 |
Correct |
30 ms |
21968 KB |
Output is correct |
13 |
Correct |
31 ms |
19404 KB |
Output is correct |
14 |
Correct |
7 ms |
15196 KB |
Output is correct |
15 |
Correct |
7 ms |
15424 KB |
Output is correct |
16 |
Correct |
191 ms |
45440 KB |
Output is correct |
17 |
Correct |
7 ms |
17496 KB |
Output is correct |
18 |
Correct |
7 ms |
17672 KB |
Output is correct |
19 |
Correct |
9 ms |
17528 KB |
Output is correct |
20 |
Correct |
7 ms |
17496 KB |
Output is correct |
21 |
Correct |
6 ms |
15196 KB |
Output is correct |
22 |
Correct |
7 ms |
17500 KB |
Output is correct |
23 |
Correct |
467 ms |
66420 KB |
Output is correct |
24 |
Correct |
10 ms |
17500 KB |
Output is correct |
25 |
Correct |
9 ms |
17808 KB |
Output is correct |
26 |
Correct |
9 ms |
15452 KB |
Output is correct |
27 |
Correct |
10 ms |
15452 KB |
Output is correct |
28 |
Correct |
160 ms |
37072 KB |
Output is correct |
29 |
Correct |
250 ms |
47036 KB |
Output is correct |
30 |
Correct |
380 ms |
56824 KB |
Output is correct |
31 |
Correct |
448 ms |
66328 KB |
Output is correct |
32 |
Correct |
9 ms |
17496 KB |
Output is correct |
33 |
Correct |
7 ms |
17500 KB |
Output is correct |
34 |
Correct |
8 ms |
17500 KB |
Output is correct |
35 |
Correct |
7 ms |
15196 KB |
Output is correct |
36 |
Correct |
6 ms |
15196 KB |
Output is correct |
37 |
Correct |
7 ms |
17584 KB |
Output is correct |
38 |
Correct |
7 ms |
17496 KB |
Output is correct |
39 |
Correct |
7 ms |
17496 KB |
Output is correct |
40 |
Correct |
7 ms |
17496 KB |
Output is correct |
41 |
Correct |
6 ms |
15320 KB |
Output is correct |
42 |
Correct |
7 ms |
17500 KB |
Output is correct |
43 |
Correct |
8 ms |
15480 KB |
Output is correct |
44 |
Correct |
8 ms |
15452 KB |
Output is correct |
45 |
Correct |
204 ms |
43372 KB |
Output is correct |
46 |
Correct |
316 ms |
55084 KB |
Output is correct |
47 |
Correct |
303 ms |
55088 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
15212 KB |
Output is correct |
2 |
Correct |
9 ms |
17500 KB |
Output is correct |
3 |
Correct |
7 ms |
15196 KB |
Output is correct |
4 |
Correct |
11 ms |
17500 KB |
Output is correct |
5 |
Correct |
7 ms |
17500 KB |
Output is correct |
6 |
Correct |
7 ms |
15196 KB |
Output is correct |
7 |
Correct |
8 ms |
15196 KB |
Output is correct |
8 |
Correct |
7 ms |
15192 KB |
Output is correct |
9 |
Correct |
189 ms |
45228 KB |
Output is correct |
10 |
Correct |
29 ms |
20448 KB |
Output is correct |
11 |
Correct |
70 ms |
33192 KB |
Output is correct |
12 |
Correct |
30 ms |
21968 KB |
Output is correct |
13 |
Correct |
31 ms |
19404 KB |
Output is correct |
14 |
Correct |
7 ms |
15196 KB |
Output is correct |
15 |
Correct |
7 ms |
15424 KB |
Output is correct |
16 |
Correct |
191 ms |
45440 KB |
Output is correct |
17 |
Correct |
7 ms |
17496 KB |
Output is correct |
18 |
Correct |
7 ms |
17672 KB |
Output is correct |
19 |
Correct |
9 ms |
17528 KB |
Output is correct |
20 |
Correct |
7 ms |
17496 KB |
Output is correct |
21 |
Correct |
6 ms |
15196 KB |
Output is correct |
22 |
Correct |
7 ms |
17500 KB |
Output is correct |
23 |
Correct |
467 ms |
66420 KB |
Output is correct |
24 |
Correct |
10 ms |
17500 KB |
Output is correct |
25 |
Correct |
9 ms |
17808 KB |
Output is correct |
26 |
Correct |
9 ms |
15452 KB |
Output is correct |
27 |
Correct |
10 ms |
15452 KB |
Output is correct |
28 |
Correct |
160 ms |
37072 KB |
Output is correct |
29 |
Correct |
250 ms |
47036 KB |
Output is correct |
30 |
Correct |
380 ms |
56824 KB |
Output is correct |
31 |
Correct |
448 ms |
66328 KB |
Output is correct |
32 |
Correct |
9 ms |
17496 KB |
Output is correct |
33 |
Correct |
7 ms |
17500 KB |
Output is correct |
34 |
Correct |
8 ms |
17500 KB |
Output is correct |
35 |
Correct |
7 ms |
15196 KB |
Output is correct |
36 |
Correct |
6 ms |
15196 KB |
Output is correct |
37 |
Correct |
7 ms |
17584 KB |
Output is correct |
38 |
Correct |
7 ms |
17496 KB |
Output is correct |
39 |
Correct |
7 ms |
17496 KB |
Output is correct |
40 |
Correct |
7 ms |
17496 KB |
Output is correct |
41 |
Correct |
6 ms |
15320 KB |
Output is correct |
42 |
Correct |
7 ms |
17500 KB |
Output is correct |
43 |
Correct |
8 ms |
15480 KB |
Output is correct |
44 |
Correct |
8 ms |
15452 KB |
Output is correct |
45 |
Correct |
204 ms |
43372 KB |
Output is correct |
46 |
Correct |
316 ms |
55084 KB |
Output is correct |
47 |
Correct |
303 ms |
55088 KB |
Output is correct |
48 |
Correct |
7 ms |
17500 KB |
Output is correct |
49 |
Correct |
7 ms |
17620 KB |
Output is correct |
50 |
Correct |
7 ms |
17500 KB |
Output is correct |
51 |
Incorrect |
7 ms |
17656 KB |
Solution announced impossible, but it is possible. |
52 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
15212 KB |
Output is correct |
2 |
Correct |
9 ms |
17500 KB |
Output is correct |
3 |
Correct |
7 ms |
15196 KB |
Output is correct |
4 |
Correct |
11 ms |
17500 KB |
Output is correct |
5 |
Correct |
7 ms |
17500 KB |
Output is correct |
6 |
Correct |
7 ms |
15196 KB |
Output is correct |
7 |
Correct |
8 ms |
15196 KB |
Output is correct |
8 |
Correct |
7 ms |
15192 KB |
Output is correct |
9 |
Correct |
189 ms |
45228 KB |
Output is correct |
10 |
Correct |
29 ms |
20448 KB |
Output is correct |
11 |
Correct |
70 ms |
33192 KB |
Output is correct |
12 |
Correct |
30 ms |
21968 KB |
Output is correct |
13 |
Correct |
31 ms |
19404 KB |
Output is correct |
14 |
Correct |
7 ms |
15196 KB |
Output is correct |
15 |
Correct |
7 ms |
15424 KB |
Output is correct |
16 |
Correct |
191 ms |
45440 KB |
Output is correct |
17 |
Correct |
7 ms |
17500 KB |
Output is correct |
18 |
Correct |
7 ms |
17604 KB |
Output is correct |
19 |
Correct |
6 ms |
15196 KB |
Output is correct |
20 |
Correct |
436 ms |
67376 KB |
Output is correct |
21 |
Correct |
434 ms |
67096 KB |
Output is correct |
22 |
Correct |
438 ms |
67100 KB |
Output is correct |
23 |
Correct |
352 ms |
65796 KB |
Output is correct |
24 |
Correct |
189 ms |
32528 KB |
Output is correct |
25 |
Correct |
282 ms |
33948 KB |
Output is correct |
26 |
Correct |
234 ms |
33988 KB |
Output is correct |
27 |
Correct |
458 ms |
73396 KB |
Output is correct |
28 |
Correct |
486 ms |
73244 KB |
Output is correct |
29 |
Correct |
547 ms |
73028 KB |
Output is correct |
30 |
Correct |
521 ms |
73168 KB |
Output is correct |
31 |
Correct |
9 ms |
17500 KB |
Output is correct |
32 |
Incorrect |
28 ms |
20256 KB |
Solution announced impossible, but it is possible. |
33 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
15212 KB |
Output is correct |
2 |
Correct |
9 ms |
17500 KB |
Output is correct |
3 |
Correct |
7 ms |
15196 KB |
Output is correct |
4 |
Correct |
11 ms |
17500 KB |
Output is correct |
5 |
Correct |
7 ms |
17500 KB |
Output is correct |
6 |
Correct |
7 ms |
15196 KB |
Output is correct |
7 |
Correct |
8 ms |
15196 KB |
Output is correct |
8 |
Correct |
7 ms |
15192 KB |
Output is correct |
9 |
Correct |
189 ms |
45228 KB |
Output is correct |
10 |
Correct |
29 ms |
20448 KB |
Output is correct |
11 |
Correct |
70 ms |
33192 KB |
Output is correct |
12 |
Correct |
30 ms |
21968 KB |
Output is correct |
13 |
Correct |
31 ms |
19404 KB |
Output is correct |
14 |
Correct |
7 ms |
15196 KB |
Output is correct |
15 |
Correct |
7 ms |
15424 KB |
Output is correct |
16 |
Correct |
191 ms |
45440 KB |
Output is correct |
17 |
Correct |
460 ms |
74140 KB |
Output is correct |
18 |
Incorrect |
396 ms |
65360 KB |
Solution announced impossible, but it is possible. |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
15212 KB |
Output is correct |
2 |
Correct |
9 ms |
17500 KB |
Output is correct |
3 |
Correct |
7 ms |
15196 KB |
Output is correct |
4 |
Correct |
11 ms |
17500 KB |
Output is correct |
5 |
Correct |
7 ms |
17500 KB |
Output is correct |
6 |
Correct |
7 ms |
15196 KB |
Output is correct |
7 |
Correct |
8 ms |
15196 KB |
Output is correct |
8 |
Correct |
7 ms |
15192 KB |
Output is correct |
9 |
Correct |
189 ms |
45228 KB |
Output is correct |
10 |
Correct |
29 ms |
20448 KB |
Output is correct |
11 |
Correct |
70 ms |
33192 KB |
Output is correct |
12 |
Correct |
30 ms |
21968 KB |
Output is correct |
13 |
Correct |
31 ms |
19404 KB |
Output is correct |
14 |
Correct |
7 ms |
15196 KB |
Output is correct |
15 |
Correct |
7 ms |
15424 KB |
Output is correct |
16 |
Correct |
191 ms |
45440 KB |
Output is correct |
17 |
Correct |
7 ms |
17496 KB |
Output is correct |
18 |
Correct |
7 ms |
17672 KB |
Output is correct |
19 |
Correct |
9 ms |
17528 KB |
Output is correct |
20 |
Correct |
7 ms |
17496 KB |
Output is correct |
21 |
Correct |
6 ms |
15196 KB |
Output is correct |
22 |
Correct |
7 ms |
17500 KB |
Output is correct |
23 |
Correct |
467 ms |
66420 KB |
Output is correct |
24 |
Correct |
10 ms |
17500 KB |
Output is correct |
25 |
Correct |
9 ms |
17808 KB |
Output is correct |
26 |
Correct |
9 ms |
15452 KB |
Output is correct |
27 |
Correct |
10 ms |
15452 KB |
Output is correct |
28 |
Correct |
160 ms |
37072 KB |
Output is correct |
29 |
Correct |
250 ms |
47036 KB |
Output is correct |
30 |
Correct |
380 ms |
56824 KB |
Output is correct |
31 |
Correct |
448 ms |
66328 KB |
Output is correct |
32 |
Correct |
9 ms |
17496 KB |
Output is correct |
33 |
Correct |
7 ms |
17500 KB |
Output is correct |
34 |
Correct |
8 ms |
17500 KB |
Output is correct |
35 |
Correct |
7 ms |
15196 KB |
Output is correct |
36 |
Correct |
6 ms |
15196 KB |
Output is correct |
37 |
Correct |
7 ms |
17584 KB |
Output is correct |
38 |
Correct |
7 ms |
17496 KB |
Output is correct |
39 |
Correct |
7 ms |
17496 KB |
Output is correct |
40 |
Correct |
7 ms |
17496 KB |
Output is correct |
41 |
Correct |
6 ms |
15320 KB |
Output is correct |
42 |
Correct |
7 ms |
17500 KB |
Output is correct |
43 |
Correct |
8 ms |
15480 KB |
Output is correct |
44 |
Correct |
8 ms |
15452 KB |
Output is correct |
45 |
Correct |
204 ms |
43372 KB |
Output is correct |
46 |
Correct |
316 ms |
55084 KB |
Output is correct |
47 |
Correct |
303 ms |
55088 KB |
Output is correct |
48 |
Correct |
7 ms |
17500 KB |
Output is correct |
49 |
Correct |
7 ms |
17620 KB |
Output is correct |
50 |
Correct |
7 ms |
17500 KB |
Output is correct |
51 |
Incorrect |
7 ms |
17656 KB |
Solution announced impossible, but it is possible. |
52 |
Halted |
0 ms |
0 KB |
- |