Submission #800383

#TimeUsernameProblemLanguageResultExecution timeMemory
800383TheSahibFountain Parks (IOI21_parks)C++17
15 / 100
992 ms63152 KiB
#include "parks.h" #include <bits/stdc++.h> #define ll long long #define pii pair<int, int> using namespace std; const int MAX = 3e5 + 5; pii dir[4] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; int n = 0; int comp = 0; int par[MAX]; int get(int node){ if(par[node] < 0) return node; return par[node] = get(par[node]); } bool unite(int v, int u){ v = get(v); u = get(u); if(v == u) return false; if(-par[v] < -par[u]) swap(v, u); par[v] += par[u]; par[u] = v; comp--; return true; } map<pii, int> f; int construct_roads(vector<int> x, vector<int> y) { memset(par, -1, sizeof(par)); n = x.size(); comp = n; for (int i = 0; i < n; i++) { f[{x[i], y[i]}] = i; } map<pii, int> roads; vector<int> v, u; for (int i = 0; i < n && comp > 1; i++) { for(pii d:dir){ pii p = {x[i] + d.first * 2, y[i] + d.second * 2}; if(f.count(p)){ int idx = f[p]; if(unite(i, idx)){ v.push_back(i); u.push_back(idx); roads[{x[i] + d.first, y[i] + d.second}] = v.size() - 1; } } } } if(comp != 1){ return 0; } map<pii, int> mp; vector<pii> abc; for(auto& p:roads){ for(pii d:dir){ pii b = {p.first.first + d.first, p.first.second + d.second}; if(f.count(b)) continue; mp[b]++; } } for(auto& p:mp){ if(p.second == 1) { abc.push_back(p.first); roads.erase(p.first); } } vector<int> a(n - 1), b(n - 1); while(abc.size()){ pii p = abc.back(); abc.pop_back(); if(mp[p] == 0) continue; mp[p]--; for(pii d:dir){ pii c = {p.first + d.first, p.second + d.second}; if(roads.count(c)){ int idx = roads[c]; a[idx] = p.first; b[idx] = p.second; roads.erase(c); c.first += d.first; c.second += d.second; mp[c] -= 1; if(mp[c] == 1){ abc.push_back(c); } break; } } } for(auto& p:mp){ if(p.second <= 0) continue; for(pii d:dir){ pii c = {p.first.first + d.first, p.first.first + d.second}; if(roads.count(c)){ int idx = roads[c]; a[idx] = p.first.first; b[idx] = p.first.second; roads.erase(c); break; } } } 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...