Submission #1255333

#TimeUsernameProblemLanguageResultExecution timeMemory
1255333ereringFountain Parks (IOI21_parks)C++20
15 / 100
638 ms73188 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...