Submission #1263652

#TimeUsernameProblemLanguageResultExecution timeMemory
1263652am_aadvikObstacles for a Llama (IOI25_obstacles)C++20
37 / 100
74 ms12332 KiB
#include <iostream> #include <vector> using namespace std; class DSU { public: vector<int> p, rank; void init(int n) { p.clear(); for (int i = 0; i <= n; ++i) p.push_back(i); rank.assign(n + 1, 1); } int fset(int x) { return (p[x] == x) ? x : p[x] = fset(p[x]); } bool iset(int x, int y) { return fset(x) == fset(y); } void uset(int x, int y) { x = fset(x), y = fset(y); if (x != y) { if (rank[x] > rank[y]) swap(x, y); p[x] = y, rank[y] += rank[x]; } } }; DSU u; vector<int> h, t; int n, m; int comp(int i, int j) { return (n <= 3? i * m + j: j); } void initialize(vector<int> a, vector<int> b) { t = a, h = b, n = t.size(), m = h.size(); u.init(((n <= 3)? n * m + n + m: m + 1)); for(int i = ((n <= 3)? 0: n - 1); i < n; ++i) for (int j = 0; j < m; ++j) if (t[i] > h[j]) { int di[] = { 0, 0, 1, -1 }; int dj[] = { 1, -1, 0, 0 }; for (int x = 0; x < 4; ++x) { int ni = i + di[x], nj = j + dj[x]; if ((ni >= 0) && (nj >= 0) && (nj < m) && (ni < n)) if (t[ni] > h[nj]) u.uset(comp(i, j), comp(ni, nj)); } } } bool can_reach(int l, int r, int s, int d) { return u.iset((0, s), comp(0, d)); } /*int main() { initialize({ 2, 1, 3 }, { 0, 1, 2, 0 }); cout << can_reach(0, 3, 1, 3) << endl; cout << can_reach(1, 3, 1, 3) << endl; }*/
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...