# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1269324 | sula2 | Migrations (IOI25_migrations) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
vector<int> T,H;
vector<vector<int>> comp;
int n,m;
pair<int,int> dir[] = {
{0, 1},
{1, 0},
{0, -1},
{-1, 0}
};
bool valid(int i, int j) {
return 0 <= min(i, j) && i < n && j < m && T[i] > H[j] && comp[i][j] == 0;
}
void dfs(int i, int j, int c) {
comp[i][j] = c;
for (auto [di, dj] : dir) if (valid(i + di, j + dj))
dfs(i + di, j + dj, c);
}
void initialize(vector<int> _T, vector<int> _H) {
n = _T.size();
m = _H.size();
comp.resize(n, vector<int>(m));
T = _T, H = _H;
int c = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (valid(i, j))
dfs(i, j, ++c);
}
bool can_reach(int s, int t) {
return comp[0][s] == comp[0][t];
}