Official

E - Round Trip Editorial by KoD


条件を満たす経路 \((x_0, y_0), \dots, (x_n, y_n)\) において、\((x_1, y_1)\) および \((x_{n-1}, y_{n-1})\) はいずれも始点のマスに隣接し、かつ \((x_1, y_1) \neq (x_{n-1}, y_{n-1})\) を満たします。よって、条件を満たす経路が存在するならば、 道のマス (始点のマスを除く) のみからなる経路であって、始点のマスに隣接する二つの異なる道のマスを結ぶようなものが存在します。逆に、そのような経路 \((x'_1, y'_1), \dots, (x'_m, y'_m)\) が存在するならば、必ず \(m \geq 3\) なので、始点のマスを \((r_s, c_s)\) としたとき \((r_s, c_s), (x'_1, y'_1), \dots, (x'_m, y'_m), (r_s, c_s)\) は長さ \(4\) 以上の経路となり、条件を満たします。

以上から、始点のマスに隣接する二つの異なる道のマスの組を全て試し (高々 \(6\) 通り)、それらを結ぶ道のマスのみからなる経路が存在するかどうかを判定すればよいです。これは幅優先探索や Union-Find などを用いると実装することができます。

実装例 (C++)

posted:
last update: