#include "parks.h"
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::vector;
using std::string;
using ll = int;
using vi = vector<ll>;
using vii = vector<vi>;
using pii = std::pair<ll,ll>;
using std::endl;
#define rep(i,j,k) for(ll i=ll(j); i<ll(k); i++)
#define REP(i,j,k) for(ll i=ll(j); i<=ll(k); i++)
#define per(i,j,k) for(ll i=ll(j); i>=ll(k); i--)
#define ln "\n"
#define pb emplace_back
#define mp std::make_pair
#define all(a) a.begin(),a.end()
int construct_roads(std::vector<int> x, std::vector<int> y) {
{
vi u,v,a,b;
vi par(x.size());
rep(i,0,x.size()) par[i] = i;
std::function<ll(ll)> root = [&](ll now){
if(par[now] == now) return now;
return par[now] = root(par[now]);
};
std::map<ll,std::map<ll,ll>> X, Y;
rep(i,0,x.size()) X[x[i]][y[i]] = Y[y[i]][x[i]] = i;
for(auto V: X){
for(auto el: V.second){
if(V.second.count(el.first+2)){
ll now = el.second;
ll next = V.second[el.first+2];
if(root(now) == root(next)) continue;
par[root(now)] = root(next);
vi P = {1,-1};
rep(i,0,2){
ll ry = el.first+1;
ll rx = V.first+P[i];
if((rx+ry)%4 == 0){
u.pb(now);
v.pb(next);
a.pb(rx);
b.pb(ry);
}
}
}
}
}
for(auto V: Y){
for(auto el: V.second){
if(V.second.count(el.first+2)){
ll now = el.second;
ll next = V.second[el.first+2];
if(root(now) == root(next)) continue;
par[root(now)] = root(next);
vi P = {1,-1};
rep(i,0,2){
ll rx = el.first+1;
ll ry = V.first+P[i];
if((rx+ry)%4 == 2){
u.pb(now);
v.pb(next);
a.pb(rx);
b.pb(ry);
}
}
}
}
}
if(u.size()+1 == x.size()){
build(u,v,a,b);
return 1;
}
}
return 0;
if(*max_element(all(x)) <= 6){
vector<std::map<ll,ll>> X(7);
rep(i,0,x.size()){
X[x[i]][y[i]] = i;
}
vi u,v,a,b;
vi par(x.size());
rep(i,0,x.size()) par[i] = i;
std::function<ll(ll)> root = [&](ll now){
if(par[now] == now) return now;
return par[now] = root(par[now]);
};
for(auto el: X[2]){
if(X[2].count(el.first+2)){
u.pb(el.second);
ll next = X[2][el.first+2];
v.pb(next);
a.pb(1);
b.pb(el.first+1);
par[root(el.second)] = root(next);
}
}
for(auto el: X[6]){
if(X[6].count(el.first+2)){
u.pb(el.second);
ll next = X[6][el.first+2];
v.pb(next);
a.pb(7);
b.pb(el.first+1);
par[root(el.second)] = root(next);
}
}
std::set<pii> used;
for(auto el: X[4]){
if(X[4].count(el.first+2)){
ll next = X[4][el.first+2];
par[root(next)] = root(el.second);
ll rx = -1, ry = -1;
if(el.first%4 == 0) rx = 3, ry = el.first+1;
if(el.first%4 == 2) rx = 5, ry = el.first+1;
used.insert(mp(rx, ry));
u.pb(el.second);
v.pb(next);
a.pb(rx);
b.pb(ry);
}
}
for(auto el: X[4]){
if(X[2].count(el.first)){
ll next = X[2][el.first];
if(root(next) != root(el.second)){
par[root(next)] = root(el.second);
u.pb(el.second);
v.pb(next);
ll rx = -1, ry = -1;
if(!used.count(mp(3,el.first-1))) rx = 3, ry = el.first-1;
if(!used.count(mp(3,el.first+1))) rx = 3, ry = el.first+1;
assert(rx != -1);
a.pb(rx);
b.pb(ry);
used.insert(mp(rx, ry));
}
}
if(X[6].count(el.first)){
ll next = X[6][el.first];
if(root(next) != root(el.second)){
par[root(next)] = root(el.second);
u.pb(el.second);
v.pb(next);
ll rx = -1, ry = -1;
if(!used.count(mp(5,el.first-1))) rx = 5, ry = el.first-1;
if(!used.count(mp(5,el.first+1))) rx = 5, ry = el.first+1;
assert(rx != -1);
a.pb(rx);
b.pb(ry);
used.insert(mp(rx, ry));
}
}
}
if(u.size()+1 == x.size()){
build(u,v,a,b);
return 1;
}
else return 0;
}
std::map<pii,ll> xy;
std::map<pii,ll> rev;
rep(i,0,x.size()) xy[mp(x[i],y[i])] = i;
ll cnt__ = 0;
rep(i,0,x.size()){
vi P = {2,0}, Q = {0,2};
vi R = {0,1}, S = {1,0};
rep(j,0,2){
if(xy.count(mp(x[i]+P[j], y[i]+Q[j]))){
ll mx = x[i]+P[j]/2;
ll my = y[i]+Q[j]/2;
rev[mp(mx+R[j], my+S[j])] = rev[mp(mx-R[j],my-S[j])] = 0;
cnt__++;
}
}
}
ll N = 0;
vi rx, ry;
for(auto &el: rev){
el.second = N++;
rx.pb(el.first.first);
ry.pb(el.first.second);
}
vii edge(N);
vii eu(N), ev(N);
rep(i,0,x.size()){
vi P = {2,0}, Q = {0,2};
vi R = {0,1}, S = {1,0};
rep(j,0,2){
if(xy.count(mp(x[i]+P[j], y[i]+Q[j]))){
ll mx = x[i]+P[j]/2;
ll my = y[i]+Q[j]/2;
ll nu = rev[mp(mx+R[j], my+S[j])];
ll nv = rev[mp(mx-R[j],my-S[j])];
ll nxy = xy[mp(x[i]+P[j], y[i]+Q[j])];
edge[nu].pb(nv);
eu[nu].pb(i);
ev[nu].pb(nxy);
edge[nv].pb(nu);
eu[nv].pb(i);
ev[nv].pb(nxy);
}
}
}
vi cnt(N);
rep(i,0,N) cnt[i] = edge[i].size();
vi u,v,a,b;
rep(k,0,N){
if(cnt[k] != 1) continue;
cnt[k]--;
ll now = k;
while(true){
ll nex = -1;
rep(i,0,edge[now].size()){
ll next = edge[now][i];
if(cnt[next] == 0) continue;
u.pb(eu[now][i]);
v.pb(ev[now][i]);
a.pb(rx[now]);
b.pb(ry[now]);
cnt[next]--;
if(cnt[next] == 1){
cnt[next]--;
nex = next;
}
}
if(nex == -1) break;
now = nex;
}
}
rep(i,0,N){
if(cnt[i] > 2) return 0;
}
rep(i,0,N){
assert(cnt[i] == 0 || cnt[i] == 2);
if(cnt[i] == 0) continue;
cnt[i] = 0;
ll now = i;
while(true){
ll val = -1;
rep(j,0,edge[now].size()){
ll next = edge[now][j];
if(cnt[next] == 0) continue;
u.pb(eu[now][j]);
v.pb(ev[now][j]);
a.pb(rx[now]);
b.pb(ry[now]);
val = cnt[next];
cnt[next] = 0;
now = next;
break;
}
if(val == -1) break;
}
rep(j,0,edge[now].size()){
ll next = edge[now][j];
if(next != i) continue;
u.pb(eu[now][j]);
v.pb(ev[now][j]);
a.pb(rx[now]);
b.pb(ry[now]);
}
}
build(u,v,a,b);
return 1;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 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 |
180 ms |
27360 KB |
Output is correct |
10 |
Correct |
9 ms |
3108 KB |
Output is correct |
11 |
Correct |
57 ms |
14964 KB |
Output is correct |
12 |
Correct |
14 ms |
4440 KB |
Output is correct |
13 |
Correct |
33 ms |
12428 KB |
Output is correct |
14 |
Correct |
1 ms |
468 KB |
Output is correct |
15 |
Correct |
2 ms |
724 KB |
Output is correct |
16 |
Correct |
193 ms |
27404 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 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 |
180 ms |
27360 KB |
Output is correct |
10 |
Correct |
9 ms |
3108 KB |
Output is correct |
11 |
Correct |
57 ms |
14964 KB |
Output is correct |
12 |
Correct |
14 ms |
4440 KB |
Output is correct |
13 |
Correct |
33 ms |
12428 KB |
Output is correct |
14 |
Correct |
1 ms |
468 KB |
Output is correct |
15 |
Correct |
2 ms |
724 KB |
Output is correct |
16 |
Correct |
193 ms |
27404 KB |
Output is correct |
17 |
Correct |
0 ms |
212 KB |
Output is correct |
18 |
Incorrect |
0 ms |
212 KB |
Tree @(3, 5) appears more than once: for edges on positions 0 and 1 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 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 |
180 ms |
27360 KB |
Output is correct |
10 |
Correct |
9 ms |
3108 KB |
Output is correct |
11 |
Correct |
57 ms |
14964 KB |
Output is correct |
12 |
Correct |
14 ms |
4440 KB |
Output is correct |
13 |
Correct |
33 ms |
12428 KB |
Output is correct |
14 |
Correct |
1 ms |
468 KB |
Output is correct |
15 |
Correct |
2 ms |
724 KB |
Output is correct |
16 |
Correct |
193 ms |
27404 KB |
Output is correct |
17 |
Correct |
0 ms |
212 KB |
Output is correct |
18 |
Incorrect |
0 ms |
212 KB |
Tree @(3, 5) appears more than once: for edges on positions 0 and 1 |
19 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 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 |
180 ms |
27360 KB |
Output is correct |
10 |
Correct |
9 ms |
3108 KB |
Output is correct |
11 |
Correct |
57 ms |
14964 KB |
Output is correct |
12 |
Correct |
14 ms |
4440 KB |
Output is correct |
13 |
Correct |
33 ms |
12428 KB |
Output is correct |
14 |
Correct |
1 ms |
468 KB |
Output is correct |
15 |
Correct |
2 ms |
724 KB |
Output is correct |
16 |
Correct |
193 ms |
27404 KB |
Output is correct |
17 |
Correct |
1 ms |
212 KB |
Output is correct |
18 |
Correct |
1 ms |
212 KB |
Output is correct |
19 |
Correct |
0 ms |
212 KB |
Output is correct |
20 |
Correct |
540 ms |
53776 KB |
Output is correct |
21 |
Correct |
426 ms |
44200 KB |
Output is correct |
22 |
Correct |
397 ms |
44216 KB |
Output is correct |
23 |
Correct |
390 ms |
37964 KB |
Output is correct |
24 |
Correct |
278 ms |
24816 KB |
Output is correct |
25 |
Correct |
361 ms |
27940 KB |
Output is correct |
26 |
Correct |
295 ms |
27980 KB |
Output is correct |
27 |
Correct |
384 ms |
34300 KB |
Output is correct |
28 |
Correct |
390 ms |
34320 KB |
Output is correct |
29 |
Correct |
362 ms |
34304 KB |
Output is correct |
30 |
Correct |
382 ms |
34324 KB |
Output is correct |
31 |
Correct |
0 ms |
212 KB |
Output is correct |
32 |
Correct |
17 ms |
3156 KB |
Output is correct |
33 |
Correct |
176 ms |
31608 KB |
Output is correct |
34 |
Correct |
428 ms |
53824 KB |
Output is correct |
35 |
Correct |
10 ms |
1876 KB |
Output is correct |
36 |
Correct |
48 ms |
7636 KB |
Output is correct |
37 |
Correct |
106 ms |
14796 KB |
Output is correct |
38 |
Correct |
120 ms |
14424 KB |
Output is correct |
39 |
Correct |
150 ms |
19624 KB |
Output is correct |
40 |
Correct |
209 ms |
24708 KB |
Output is correct |
41 |
Correct |
279 ms |
29996 KB |
Output is correct |
42 |
Correct |
398 ms |
35288 KB |
Output is correct |
43 |
Correct |
0 ms |
212 KB |
Output is correct |
44 |
Correct |
1 ms |
300 KB |
Output is correct |
45 |
Correct |
0 ms |
212 KB |
Output is correct |
46 |
Correct |
0 ms |
212 KB |
Output is correct |
47 |
Correct |
0 ms |
212 KB |
Output is correct |
48 |
Correct |
0 ms |
212 KB |
Output is correct |
49 |
Correct |
0 ms |
212 KB |
Output is correct |
50 |
Correct |
1 ms |
320 KB |
Output is correct |
51 |
Correct |
1 ms |
300 KB |
Output is correct |
52 |
Correct |
1 ms |
212 KB |
Output is correct |
53 |
Correct |
0 ms |
212 KB |
Output is correct |
54 |
Correct |
3 ms |
724 KB |
Output is correct |
55 |
Correct |
3 ms |
908 KB |
Output is correct |
56 |
Correct |
164 ms |
24176 KB |
Output is correct |
57 |
Correct |
311 ms |
35984 KB |
Output is correct |
58 |
Correct |
276 ms |
36012 KB |
Output is correct |
59 |
Correct |
1 ms |
212 KB |
Output is correct |
60 |
Correct |
1 ms |
212 KB |
Output is correct |
61 |
Correct |
1 ms |
212 KB |
Output is correct |
62 |
Correct |
398 ms |
44320 KB |
Output is correct |
63 |
Correct |
439 ms |
49020 KB |
Output is correct |
64 |
Correct |
406 ms |
46600 KB |
Output is correct |
65 |
Correct |
4 ms |
1108 KB |
Output is correct |
66 |
Correct |
8 ms |
1876 KB |
Output is correct |
67 |
Correct |
171 ms |
22660 KB |
Output is correct |
68 |
Correct |
280 ms |
34044 KB |
Output is correct |
69 |
Correct |
433 ms |
45024 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 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 |
180 ms |
27360 KB |
Output is correct |
10 |
Correct |
9 ms |
3108 KB |
Output is correct |
11 |
Correct |
57 ms |
14964 KB |
Output is correct |
12 |
Correct |
14 ms |
4440 KB |
Output is correct |
13 |
Correct |
33 ms |
12428 KB |
Output is correct |
14 |
Correct |
1 ms |
468 KB |
Output is correct |
15 |
Correct |
2 ms |
724 KB |
Output is correct |
16 |
Correct |
193 ms |
27404 KB |
Output is correct |
17 |
Correct |
410 ms |
44952 KB |
Output is correct |
18 |
Correct |
466 ms |
44972 KB |
Output is correct |
19 |
Correct |
405 ms |
41896 KB |
Output is correct |
20 |
Correct |
366 ms |
32008 KB |
Output is correct |
21 |
Correct |
322 ms |
28696 KB |
Output is correct |
22 |
Correct |
0 ms |
212 KB |
Output is correct |
23 |
Correct |
35 ms |
5692 KB |
Output is correct |
24 |
Correct |
17 ms |
3264 KB |
Output is correct |
25 |
Correct |
68 ms |
10712 KB |
Output is correct |
26 |
Correct |
165 ms |
17792 KB |
Output is correct |
27 |
Correct |
150 ms |
17760 KB |
Output is correct |
28 |
Correct |
189 ms |
22304 KB |
Output is correct |
29 |
Correct |
220 ms |
26636 KB |
Output is correct |
30 |
Correct |
310 ms |
30676 KB |
Output is correct |
31 |
Correct |
376 ms |
35144 KB |
Output is correct |
32 |
Correct |
376 ms |
46116 KB |
Output is correct |
33 |
Correct |
392 ms |
49072 KB |
Output is correct |
34 |
Correct |
4 ms |
1236 KB |
Output is correct |
35 |
Correct |
8 ms |
2132 KB |
Output is correct |
36 |
Correct |
175 ms |
22040 KB |
Output is correct |
37 |
Correct |
265 ms |
33392 KB |
Output is correct |
38 |
Correct |
426 ms |
43992 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 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 |
180 ms |
27360 KB |
Output is correct |
10 |
Correct |
9 ms |
3108 KB |
Output is correct |
11 |
Correct |
57 ms |
14964 KB |
Output is correct |
12 |
Correct |
14 ms |
4440 KB |
Output is correct |
13 |
Correct |
33 ms |
12428 KB |
Output is correct |
14 |
Correct |
1 ms |
468 KB |
Output is correct |
15 |
Correct |
2 ms |
724 KB |
Output is correct |
16 |
Correct |
193 ms |
27404 KB |
Output is correct |
17 |
Correct |
0 ms |
212 KB |
Output is correct |
18 |
Incorrect |
0 ms |
212 KB |
Tree @(3, 5) appears more than once: for edges on positions 0 and 1 |
19 |
Halted |
0 ms |
0 KB |
- |