Submission #1255367

#TimeUsernameProblemLanguageResultExecution timeMemory
1255367ereringFountain Parks (IOI21_parks)C++20
45 / 100
675 ms78932 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; 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 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...