제출 #1172259

#제출 시각아이디문제언어결과실행 시간메모리
1172259gyg분수 공원 (IOI21_parks)C++20
15 / 100
702 ms64828 KiB
#include "parks.h" #include <bits/stdc++.h> using namespace std; #define arr array #define vec vector #define pii pair<int, int> #define fir first #define sec second const int N = 2e5 + 5; int n; arr<pii, N> ps; map<pii, int> id; vec<pii> edg; void edg_cmp() { for (int u = 1; u <= n; u++) { vec<pii> dlt = {{-2, 0}, {2, 0}, {0, -2}, {0, 2}}; for (pii x : dlt) { int a = ps[u].fir + x.fir, b = ps[u].sec + x.sec; if (!id[{a, b}]) continue; edg.push_back({u, id[{a, b}]}); } } } struct Dsj { arr<int, N> prnt, sz; void intl() { for (int u = 1; u <= n; u++) prnt[u] = u, sz[u] = 1; } int pr(int u) { return (prnt[u] == u) ? u : prnt[u] = pr(prnt[u]); } bool mrg(int u, int v) { u = pr(u), v = pr(v); if (u == v) return false; prnt[v] = u, sz[u] += sz[v]; return true; } } dsj; vec<pii> usd; void usd_cmp() { dsj.intl(); for (pii x : edg) { int u = x.fir, v = x.sec; if (!dsj.mrg(u, v)) continue; usd.push_back(x); } } vec<pii> sd; void sd_cmp() { for (pii x : usd) { int u = x.fir, v = x.sec; if (ps[u] > ps[v]) swap(u, v); if (ps[u].fir != ps[v].fir) { sd.push_back({ps[u].fir + 1, ps[u].sec - 1}); } else if (ps[u].fir == 2) { sd.push_back({ps[u].fir - 1, ps[u].sec + 1}); } else { sd.push_back({ps[u].fir + 1, ps[u].sec + 1}); } } } int construct_roads(vec<int> _x, vec<int> _y) { n = _x.size(); for (int u = 1; u <= n; u++) { ps[u] = {_x[u - 1], _y[u - 1]}; id[ps[u]] = u; } edg_cmp(); usd_cmp(); if (dsj.sz[dsj.pr(1)] != n) return 0; sd_cmp(); vec<int> a, b, c, d; for (pii x : usd) a.push_back(x.fir - 1), b.push_back(x.sec - 1); for (pii x : sd) c.push_back(x.fir), d.push_back(x.sec); build(a, b, c, d); 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...