#include "parks.h"
#include <iostream>
#include <vector>
#include<map>
#include<algorithm>
#include<cassert>
using namespace std;
using pii = pair<int, int>;
using ll = long long;
#define forn(i, n) for(int i=0; i<(int)n; ++i)
#define forsn(i, s, n) for(int i=s; i<(int)n; ++i)
#define dforn(i, n) for(int i=n-1; i>=0; --i)
#define dforsn(i, s, n) for(int i=n-1; i>=s; --i)
#define PB push_back
#define F first
#define S second
#define MP make_pair
const int MAXN = 200010;
int n, eind, bi, curi, X[MAXN], Y[MAXN];
bool vis1[MAXN], vis2[MAXN], vis3[MAXN];
pii ptsInd[MAXN];
map<pii, int> mp;
map<pii, int> ben;
vector<pii> g1[MAXN], draw;
vector<int> g2[MAXN];
vector<int> g3[MAXN];
pii nam[MAXN];
int getInd(pii b){
auto itr = ben.find(b);
if(itr!=ben.end()) return itr->S;
else{
ben[b]=bi;
ptsInd[bi]=b;
++bi;
return bi-1;
}
}
void sed(int u, int v){
int ind = curi++;
nam[ind] = {u, v};
int ux = X[u], uy = Y[u];
int vx = X[v], vy = Y[v];
if(ux==vx){
if(uy>vy) swap(uy, vy);
int i = getInd({ux-1, uy+1});
int j = getInd({ux+1, uy+1});
g2[ind].PB(i), g2[ind].PB(j);
g3[i].PB(ind), g3[j].PB(ind);
}
else{
if(ux>vx) swap(ux, vx);
int i = getInd({ux+1, uy-1});
int j = getInd({ux+1, uy+1});
g2[ind].PB(i), g2[ind].PB(j);
g3[i].PB(ind), g3[j].PB(ind);
}
}
void dfs1(int v){
vis1[v]=true;
for(pii to:g1[v]) if(!vis1[to.F]){
sed(v, to.F);
dfs1(to.F);
}
}
void dfs2(int v, bool flag){
if(!flag){
vis2[v]=true;
int cn = 0;
for(int to:g2[v]) if(!vis3[to]){
if(!cn) draw.PB({v, to});
dfs2(to, !flag);
++cn;
}
}
else{
vis3[v]=true;
for(int to:g3[v]) if(!vis2[to]) dfs2(to, !flag);
}
}
int construct_roads(std::vector<int> x, std::vector<int> y) {
n = (int)x.size();
forn(i, n){
mp[MP(x[i], y[i])] = i;
X[i]=x[i];
Y[i]=y[i];
}
for(auto el:mp){
auto it = mp.find(MP(el.F.F + 2, el.F.S));
if(it!=mp.end()){
g1[el.S].PB(MP(it->S, eind));
g1[it->S].PB(MP(el.S, eind));
++eind;
}
it = mp.find({el.F.F, el.F.S + 2});
if(it!=mp.end()){
g1[el.S].PB(MP(it->S, eind));
g1[it->S].PB(MP(el.S, eind));
++eind;
}
}
dfs1(0);
bool possible=true;
forn(i, n) possible&=vis1[i];
if(!possible){
return 0;
}
forn(el, curi) if(!vis2[el]) dfs2(el, false);
vector<int> u, v, a, b;
for(pii el:draw){
u.PB(nam[el.F].F);
v.PB(nam[el.F].S);
a.PB(ptsInd[el.S].F);
b.PB(ptsInd[el.S].S);
}
build(u, v, a, b);
return 1;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
14420 KB |
Output is correct |
2 |
Correct |
7 ms |
14432 KB |
Output is correct |
3 |
Correct |
7 ms |
14420 KB |
Output is correct |
4 |
Correct |
7 ms |
14420 KB |
Output is correct |
5 |
Correct |
9 ms |
14420 KB |
Output is correct |
6 |
Correct |
9 ms |
14340 KB |
Output is correct |
7 |
Correct |
7 ms |
14420 KB |
Output is correct |
8 |
Correct |
7 ms |
14420 KB |
Output is correct |
9 |
Correct |
196 ms |
62176 KB |
Output is correct |
10 |
Correct |
21 ms |
19284 KB |
Output is correct |
11 |
Correct |
99 ms |
40216 KB |
Output is correct |
12 |
Correct |
30 ms |
21760 KB |
Output is correct |
13 |
Correct |
56 ms |
28380 KB |
Output is correct |
14 |
Correct |
8 ms |
14636 KB |
Output is correct |
15 |
Correct |
12 ms |
14676 KB |
Output is correct |
16 |
Correct |
191 ms |
60288 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
14420 KB |
Output is correct |
2 |
Correct |
7 ms |
14432 KB |
Output is correct |
3 |
Correct |
7 ms |
14420 KB |
Output is correct |
4 |
Correct |
7 ms |
14420 KB |
Output is correct |
5 |
Correct |
9 ms |
14420 KB |
Output is correct |
6 |
Correct |
9 ms |
14340 KB |
Output is correct |
7 |
Correct |
7 ms |
14420 KB |
Output is correct |
8 |
Correct |
7 ms |
14420 KB |
Output is correct |
9 |
Correct |
196 ms |
62176 KB |
Output is correct |
10 |
Correct |
21 ms |
19284 KB |
Output is correct |
11 |
Correct |
99 ms |
40216 KB |
Output is correct |
12 |
Correct |
30 ms |
21760 KB |
Output is correct |
13 |
Correct |
56 ms |
28380 KB |
Output is correct |
14 |
Correct |
8 ms |
14636 KB |
Output is correct |
15 |
Correct |
12 ms |
14676 KB |
Output is correct |
16 |
Correct |
191 ms |
60288 KB |
Output is correct |
17 |
Correct |
8 ms |
14420 KB |
Output is correct |
18 |
Correct |
8 ms |
14420 KB |
Output is correct |
19 |
Correct |
8 ms |
14420 KB |
Output is correct |
20 |
Correct |
7 ms |
14420 KB |
Output is correct |
21 |
Correct |
7 ms |
14420 KB |
Output is correct |
22 |
Correct |
7 ms |
14420 KB |
Output is correct |
23 |
Runtime error |
323 ms |
145584 KB |
Execution killed with signal 11 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
14420 KB |
Output is correct |
2 |
Correct |
7 ms |
14432 KB |
Output is correct |
3 |
Correct |
7 ms |
14420 KB |
Output is correct |
4 |
Correct |
7 ms |
14420 KB |
Output is correct |
5 |
Correct |
9 ms |
14420 KB |
Output is correct |
6 |
Correct |
9 ms |
14340 KB |
Output is correct |
7 |
Correct |
7 ms |
14420 KB |
Output is correct |
8 |
Correct |
7 ms |
14420 KB |
Output is correct |
9 |
Correct |
196 ms |
62176 KB |
Output is correct |
10 |
Correct |
21 ms |
19284 KB |
Output is correct |
11 |
Correct |
99 ms |
40216 KB |
Output is correct |
12 |
Correct |
30 ms |
21760 KB |
Output is correct |
13 |
Correct |
56 ms |
28380 KB |
Output is correct |
14 |
Correct |
8 ms |
14636 KB |
Output is correct |
15 |
Correct |
12 ms |
14676 KB |
Output is correct |
16 |
Correct |
191 ms |
60288 KB |
Output is correct |
17 |
Correct |
8 ms |
14420 KB |
Output is correct |
18 |
Correct |
8 ms |
14420 KB |
Output is correct |
19 |
Correct |
8 ms |
14420 KB |
Output is correct |
20 |
Correct |
7 ms |
14420 KB |
Output is correct |
21 |
Correct |
7 ms |
14420 KB |
Output is correct |
22 |
Correct |
7 ms |
14420 KB |
Output is correct |
23 |
Runtime error |
323 ms |
145584 KB |
Execution killed with signal 11 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
14420 KB |
Output is correct |
2 |
Correct |
7 ms |
14432 KB |
Output is correct |
3 |
Correct |
7 ms |
14420 KB |
Output is correct |
4 |
Correct |
7 ms |
14420 KB |
Output is correct |
5 |
Correct |
9 ms |
14420 KB |
Output is correct |
6 |
Correct |
9 ms |
14340 KB |
Output is correct |
7 |
Correct |
7 ms |
14420 KB |
Output is correct |
8 |
Correct |
7 ms |
14420 KB |
Output is correct |
9 |
Correct |
196 ms |
62176 KB |
Output is correct |
10 |
Correct |
21 ms |
19284 KB |
Output is correct |
11 |
Correct |
99 ms |
40216 KB |
Output is correct |
12 |
Correct |
30 ms |
21760 KB |
Output is correct |
13 |
Correct |
56 ms |
28380 KB |
Output is correct |
14 |
Correct |
8 ms |
14636 KB |
Output is correct |
15 |
Correct |
12 ms |
14676 KB |
Output is correct |
16 |
Correct |
191 ms |
60288 KB |
Output is correct |
17 |
Correct |
7 ms |
14412 KB |
Output is correct |
18 |
Correct |
7 ms |
14428 KB |
Output is correct |
19 |
Correct |
9 ms |
14420 KB |
Output is correct |
20 |
Correct |
401 ms |
121232 KB |
Output is correct |
21 |
Correct |
379 ms |
102756 KB |
Output is correct |
22 |
Correct |
400 ms |
102728 KB |
Output is correct |
23 |
Runtime error |
265 ms |
130236 KB |
Execution killed with signal 11 |
24 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
14420 KB |
Output is correct |
2 |
Correct |
7 ms |
14432 KB |
Output is correct |
3 |
Correct |
7 ms |
14420 KB |
Output is correct |
4 |
Correct |
7 ms |
14420 KB |
Output is correct |
5 |
Correct |
9 ms |
14420 KB |
Output is correct |
6 |
Correct |
9 ms |
14340 KB |
Output is correct |
7 |
Correct |
7 ms |
14420 KB |
Output is correct |
8 |
Correct |
7 ms |
14420 KB |
Output is correct |
9 |
Correct |
196 ms |
62176 KB |
Output is correct |
10 |
Correct |
21 ms |
19284 KB |
Output is correct |
11 |
Correct |
99 ms |
40216 KB |
Output is correct |
12 |
Correct |
30 ms |
21760 KB |
Output is correct |
13 |
Correct |
56 ms |
28380 KB |
Output is correct |
14 |
Correct |
8 ms |
14636 KB |
Output is correct |
15 |
Correct |
12 ms |
14676 KB |
Output is correct |
16 |
Correct |
191 ms |
60288 KB |
Output is correct |
17 |
Runtime error |
308 ms |
135688 KB |
Execution killed with signal 11 |
18 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
14420 KB |
Output is correct |
2 |
Correct |
7 ms |
14432 KB |
Output is correct |
3 |
Correct |
7 ms |
14420 KB |
Output is correct |
4 |
Correct |
7 ms |
14420 KB |
Output is correct |
5 |
Correct |
9 ms |
14420 KB |
Output is correct |
6 |
Correct |
9 ms |
14340 KB |
Output is correct |
7 |
Correct |
7 ms |
14420 KB |
Output is correct |
8 |
Correct |
7 ms |
14420 KB |
Output is correct |
9 |
Correct |
196 ms |
62176 KB |
Output is correct |
10 |
Correct |
21 ms |
19284 KB |
Output is correct |
11 |
Correct |
99 ms |
40216 KB |
Output is correct |
12 |
Correct |
30 ms |
21760 KB |
Output is correct |
13 |
Correct |
56 ms |
28380 KB |
Output is correct |
14 |
Correct |
8 ms |
14636 KB |
Output is correct |
15 |
Correct |
12 ms |
14676 KB |
Output is correct |
16 |
Correct |
191 ms |
60288 KB |
Output is correct |
17 |
Correct |
8 ms |
14420 KB |
Output is correct |
18 |
Correct |
8 ms |
14420 KB |
Output is correct |
19 |
Correct |
8 ms |
14420 KB |
Output is correct |
20 |
Correct |
7 ms |
14420 KB |
Output is correct |
21 |
Correct |
7 ms |
14420 KB |
Output is correct |
22 |
Correct |
7 ms |
14420 KB |
Output is correct |
23 |
Runtime error |
323 ms |
145584 KB |
Execution killed with signal 11 |
24 |
Halted |
0 ms |
0 KB |
- |