(UPD: 2024-12-04 14:48 UTC) Judge is not working due to Cloudflare incident. (URL) We can do nothing about it, sorry. After the incident is resolved, we will grade all submissions.

Submission #826284

#TimeUsernameProblemLanguageResultExecution timeMemory
826284errayGarden (JOI23_garden)C++17
100 / 100
2320 ms7128 KiB
#include <bits/stdc++.h> using namespace std; #ifdef DEBUG #include "/home/eagle/ioi19/day2/debug.h" #else #define debug(...) void(37) #endif struct DSU { vector<int> link; vector<int> sz; DSU(int n) { link.resize(n); iota(link.begin(), link.end(), 0); sz.resize(n, 1); } int get(int v) { return link[v] = (link[v] == v ? v : get(link[v])); } bool unite(int x, int y) { x = get(x), y = get(y); if (x == y) { return false; } link[y] = x; sz[x] += sz[y]; return true; } int size(int x) { return sz[get(x)]; } }; int main() { int N, M, D; cin >> N >> M >> D; vector<bool> X(D), Y(D); for (int i = 0; i < N; ++i) { int P, Q; cin >> P >> Q; X[P] = true; Y[Q] = true; } vector<vector<int>> link(D); vector<int> rem(D, -1); for (int i = 0; i < M; ++i) { int R, S; cin >> R >> S; if (!Y[S]) { rem[S] = max(rem[S], R); link[R].push_back(S); } } debug(X, Y, rem, link); int ans = D * D; for (int l = 0; l < D; ++l) { int X_need = accumulate(X.begin(), X.end(), 0); vector<bool> out(D, false); DSU comps(D); int gap = 0; auto Rem = [&](int x) { for (auto d : {-1, 1}) { int go = (x + d + D) % D; if (out[go]) { comps.unite(x, go); } } out[x] = true; gap = max(gap, comps.size(x)); }; vector<vector<int>> rt(D); for (int i = 0; i < D; ++i) { if (rem[i] != -1) { rt[rem[i]].push_back(i); } else if (!Y[i]) { Rem(i); } } for (int s = 1; s <= D; ++s) { int add = (l + s - 1) % D; X_need -= X[add]; for (auto y : rt[add]) { Rem(y); } if (X_need == 0) { ans = min(ans, s * (D - gap)); } } for (auto x : link[l]) { rem[x] = l; } } cout << ans << '\n'; }
#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...