#include <bits/stdc++.h>
#include "parks.h"
using namespace std;
#define pb push_back
const int MAXN=2e5+5;
vector<int> adj[MAXN],vec[MAXN],u,v,a,b;
bool vis[MAXN];
void dfs(int node){
if(vis[node])return;
vis[node]=1;
for(auto i:adj[node])dfs(i);
}
int construct_roads(std::vector<int> x, std::vector<int> y) {
if (x.size() == 1) {
build({}, {}, {}, {});
return 1;
}
map<pair<int,int>,int> exist;
set<int> st;
for(int i=0;i<x.size();i++){
exist[{x[i],y[i]}]=i+1;
vec[x[i]].pb(y[i]);
st.insert(x[i]);
}
map<pair<int,int>,bool> taken;
for(auto i:st){
for(auto j:vec[i]){
int X=i,Y=j;
if(exist[{X,Y-2}]){
u.pb(exist[{X,Y-2}]);
v.pb({exist[{X,Y}]});
b.pb(Y-1);
if((X/2+Y/2)%2)a.pb(X-1);
else a.pb(X+1);
taken[{a.back(),b.back()}]=1;
}
}
}
for(int i=0;i<x.size();i++){
int X=x[i],Y=y[i];
int k=exist[{X+2,Y}];
if(k){
if(!taken[{X+1,Y-1}]){
u.pb(k);
v.pb(i+1);
b.pb(Y-1);
taken[{X+1,Y-1}]=1;
a.pb(X+1);
}
else if(!taken[{X+1,Y+1}]){
u.pb(k);
v.pb(i+1);
b.pb(Y+1);
taken[{X+1,Y+1}]=1;
a.pb(X+1);
}
}
}
for(int i=0;i<v.size();i++){
u[i]--;
v[i]--;
adj[u[i]].pb(v[i]); adj[v[i]].pb(u[i]);
}
dfs(0);
for(int i=0;i<x.size();i++){
if(!vis[i]){
return 0;
}
}
build(u, v, a, b);
return 1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |