# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1269325 | sula2 | 장애물 (IOI25_obstacles) | 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];
}