#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;
vector<int> uniq;
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]);
}
for(auto i:st)uniq.pb(i);
sort(uniq.begin(),uniq.end());
map<pair<int,int>,bool> taken;
for(int i=1;i<uniq.size();i++){
for(auto j:vec[uniq[i]]){
int X=uniq[i],Y=j;
int k=exist[{X-2,Y}];
if(k){
u.pb(k);
v.pb({exist[{X,Y}]});
a.pb(X-1);
if(i%2)b.pb(Y+1);
else b.pb(Y-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,Y-2}];
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... |