Submission #467469

#TimeUsernameProblemLanguageResultExecution timeMemory
467469JvThunderFountain Parks (IOI21_parks)C++17
100 / 100
576 ms43600 KiB
#include "parks.h" #include <bits/stdc++.h> #define fir first #define sec second #define pb push_back typedef long long ll; using namespace std; map<pair<int,int>,int> c; set<pair<int,int>> taken; vector<pair<int,int>> coor; //DSU int par[200005] = {0}; int find(int x) { if(par[x]==x) return x; return par[x] = find(par[x]); } void join(int a,int b) { if(find(a)==find(b)) assert(false); par[find(a)] = par[find(b)]; } int cnt = 0; vector<int> u,v,a,b; void addline(int ax,int ay,int bx,int by,int inda,int indb) { if(find(c[{ax,ay}])==find(c[{bx,by}])) return; pair<int,int> bench = {-1,-1}; if(ax==bx) { pair<int,int> tmp = {ax-1,(ay+by)/2}; if(taken.find(tmp)==taken.end() && (tmp.fir-tmp.sec)%4==0) bench = tmp; tmp = {ax+1,(ay+by)/2}; if(taken.find(tmp)==taken.end() && (tmp.fir-tmp.sec)%4==0) bench = tmp; } if(ay==by) { pair<int,int> tmp = {(ax+bx)/2,ay-1}; if(taken.find(tmp)==taken.end() && (tmp.fir-tmp.sec)%4!=0) bench = tmp; tmp = {(ax+bx)/2,ay+1}; if(taken.find(tmp)==taken.end() && (tmp.fir-tmp.sec)%4!=0) bench = tmp; } if(bench != make_pair(-1,-1)) { join(inda,indb); taken.insert(bench); u.pb(inda); v.pb(indb); a.pb(bench.fir); b.pb(bench.sec); cnt++; } } int construct_roads(vector<int> x, vector<int> y) { int n = x.size(); for(int i=0;i<n;i++) par[i] = i; for(int i=0;i<n;i++) c[{x[i],y[i]}] = i; for(int i=0;i<n;i++) coor.pb({x[i],y[i]}); sort(coor.begin(),coor.end()); vector<pair< pair<int,int>,pair<int,int> >> ret; for(int i=0;i<n;i++) { int tx = coor[i].fir; int ty = coor[i].sec; if(c.count({tx,ty-2})) addline(tx,ty-2,tx,ty,c[{tx,ty}],c[{tx,ty-2}]); if(c.count({tx-2,ty})) addline(tx-2,ty,tx,ty,c[{tx,ty}],c[{tx-2,ty}]); } if(cnt==n-1) { build(u,v,a,b); return 1; } else return 0; }
#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...