Submission #1365181

#TimeUsernameProblemLanguageResultExecution timeMemory
1365181mannshah1211Obstacles for a Llama (IOI25_obstacles)C++20
0 / 100
41 ms8184 KiB
#include "obstacles.h"
#include <bits/stdc++.h>

using namespace std;

class dsu {
 public:
  vector<int> p;
  int n;

  dsu() {

  }

  dsu(int _n) : n(_n) {
    p.resize(n);
  }

  int get(int x) {
    if (p[x] == x) {
      return x;
    }
    return (p[x] = get(p[x]));
  }

  void unite(int x, int y) {
    x = get(x);
    y = get(y);
    if (x != y) {
      p[y] = x;
    }
    return;
  }

  bool same(int x, int y) {
    return (get(x) == get(y));
  }
};

vector<int> tt, hh;
int n, m;
dsu ds;

void initialize(vector<int> t, vector<int> h) {
  tt = t, hh = h;
  n = t.size(), m = h.size();
  auto Valid = [&](int x, int y) {
    return (0 <= x) && (x < n) && (0 <= y) && (y < m) && (t[x] > h[y]);
  };
  ds = dsu(n * m);
  vector<int> di = {-1, 0, 1, 0}, dj = {0, 1, 0, -1};
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      for (int k = 0; k < 4; k++) {
        int new_i = i + di[k], new_j = j + dj[k];
        if (Valid(new_i, new_j) && Valid(i, j)) {
          ds.unite(m * i + j, m * new_i + new_j);
        }
      }
    }
  }
}

bool can_reach(int l, int r, int s, int d) {
  return ds.same(s, d);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...