#P1227. RoboContest
RoboContest
描述
沙里夫大学计算机工程系举办了一场全国性的机器人竞赛。每支参赛队伍都会带来一个固定数量的相同小型机器人,专门为这次竞赛设计。竞赛的桌面足够大,并且在桌面上绘制了一个地图。地图上包含许多区域,每个区域的颜色与相邻区域的颜色不同。机器人能够感知地图上的颜色。
竞赛对于每支队伍只举行一次,获胜的队伍将晋级到第二轮。对于每支队伍,竞赛裁判(由每个参赛大学的代表组成)会选择地图上的 个区域,队伍将在这些选定的区域放置一个机器人。每个机器人可以朝任何方向转动,并从一个区域移动到任何相邻区域。竞赛的计时器从零开始,并且每隔 秒钟响一次。竞赛的主要规则是:在每次计时器响起时,每个机器人都应该从当前区域移动到它的一个相邻区域,并且确保在下次计时时到达新的区域。这些区域足够小,因此总是可以做到这一点。多个机器人可以同时位于同一个区域。
竞赛的目标是,参赛队伍的机器人应该根据上述规则移动,使得在未来的某一时刻,所有机器人能聚集到一个区域。如果机器人能够实现这一目标,队伍获胜;否则,机器人驾驶程序会检测到无法完成这一目标,届时机器人将在第一次计时时不移动。参赛队伍在比赛前对地图一无所知,只有在开始之前的几分钟内才会得到实际的地图数据和初始位置,足够让队伍将数据输入到机器人的记忆中。因此,驱动机器人的程序应该能够适应任何可能的地图和初始位置。
你是你们大学队伍在此次竞赛中的首席程序员。你需要编写一个程序来控制所有机器人的移动。该程序应该接收地图数据和机器人初始位置,并输出每个机器人应该遵循的(可能为空的)一组移动指令,使得所有机器人能够在未来的某个时刻聚集到一个区域。在这场 ACM 编程竞赛中,你需要解决一个较为简单的问题:你只需判断机器人是否能够通过同步移动成功聚集到一个区域。
输入
输入的第一行包含一个整数 ,表示测试用例的数量,接着是每个测试用例的输入数据。每个测试用例的第一行包含两个整数 和 ,分别表示区域的数量和机器人的数量。紧接着是 行,每行描述一个区域,格式如下:一个非负整数,表示该区域的唯一标识符,接着是该区域的邻居数量 ,后面跟着 个数,表示该区域的邻居区域的标识符。测试用例的最后一行包含 个整数,表示机器人初始位置的区域标识符。
输出
对于每个测试用例,输出一行,包含单词 或 ,表示是否可能通过同步移动实现机器人成功聚集到一个区域。
1
4 2
1 3 2 3 4
2 3 1 3 4
3 3 1 2 4
4 3 1 2 3
1 2
YES
来源
Tehran 2002 Preliminary