結果
| 問題 | No.424 立体迷路 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-10-19 12:29:13 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 1 ms / 2,000 ms |
| + 828µs | |
| コード長 | 1,012 bytes |
| 記録 | |
| コンパイル時間 | 3,317 ms |
| コンパイル使用メモリ | 197,580 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-10-19 12:29:28 |
| 合計ジャッジ時間 | 4,998 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 21 |
ソースコード
#include <atcoder/dsu>
#include <cmath>
#include <iostream>
#include <vector>
int main() {
using namespace std;
int h, w, sx, sy, gx, gy;
cin >> h >> w >> sx >> sy >> gx >> gy;
int s = (sx - 1) * w + (sy - 1);
int g = (gx - 1) * w + (gy - 1);
vector<string> b(h);
for (auto &e : b) { cin >> e; }
atcoder::dsu uf(h * w);
for (int x = 0; x < h; x++) {
for (int y = 0; y < w; y++) {
int p = x * w + y;
if (x < h - 1 && abs(b[x][y] - b[x + 1][y]) < 2) {
uf.merge(p, p + w);
}
if (y < w - 1 && abs(b[x][y] - b[x][y + 1]) < 2) {
uf.merge(p, p + 1);
}
if (x < h - 2 && b[x][y] == b[x + 2][y] && b[x][y] > b[x + 1][y]) {
uf.merge(p, p + w * 2);
}
if (y < w - 2 && b[x][y] == b[x][y + 2] && b[x][y] > b[x][y + 1]) {
uf.merge(p, p + 2);
}
}
}
cout << (uf.same(s, g) ? "YES\n" : "NO\n");
}