P4668 [BalticOI 2011] Treasures and Vikings (Day1)

题目描述

你有一张藏宝图,这张地图被划分为一个 $N \times M$ 的网格。一个网格可能是海洋或者是岛屿的一部分。此外,地图上标出了宝藏和占据一个(海洋)方格的敌方维京船。最后,为了方便起见,你还标出了你自己的位置。 现在你必须设置一条固定的路线去获得宝藏。路线必须从你的起始位置开始,以宝藏为终点,并由一系列移动组成。在每次移动中,你只能移动到一个(水平或垂直)相邻的非岛屿方格。但要小心:维京船可能会跟随你,使用相同的移动方式!在你按照路线进行每次移动后,维京船可能会移动也可能不动。你的移动和维京船的反应合称为一轮。 在每轮之后,进行以下检查: - 如果你与维京船在同一条直线上(你与维京船在同一垂直或水平线上,并且中间只有海洋),你就死了。 - 如果你没有死并且在宝藏点上,你就获得了宝藏。 编写一个程序来决定是否可以提前设置一条固定路线,使你可以通过这条路线获得宝藏,并且不会被维京人杀死——无论维京船如何移动。

输入格式

输入的第一行包含两个整数 $N$ 和 $M$,表示地图的尺寸。接下来的 $N$ 行中的每一行包含 $M$ 个字符。每个字符描述地图上的一个方格,可以是 ``.``(海洋)、``I``(岛屿的一部分)、``V``(维京船)、``Y``(你的位置)或 ``T``(宝藏)。``V``、``Y`` 和 ``T`` 各出现一次。

输出格式

输出的唯一一行必须包含字符串 ``YES``,如果可以设置一条路线来获得宝藏;否则输出 ``NO``。

说明/提示

**样例解释 1** 路线是:向下走三次,向右走三次,最后再向下走一次。 **数据范围** 对于 $50\%$ 的数据,$1 \le N,M \le 200$。 对于所有数据,$1 \le N,M \le 700$。 题面翻译由 ChatGPT-4o 提供。