Arezou 和她的兄弟 Borzou 是双胞胎。他们收到的生日礼物是一套好玩的玩具火车。他们用它建了一个有
其中有些车站是充电车站。无论何时,如果火车抵达某个充电车站,它都会被充到满电。满电火车拥有足够的动力连续地驶过
每个车站都有一个轨道开关,可以扳向任一以该车站为起点的轨道。火车从某个车站驶出时,驶向的正是该车站的开关所扳向的轨道。
这对双胞胎打算用他们的火车玩个游戏。他们已经分完了所有的车站:每个车站要么归 Arezou,要么归 Borzou。游戏里面只有一列火车。游戏开始时,这列火车停在车站
无论何时,在火车首次进入某一车站时,该车站的拥有者都要扳定车站开关。开关一旦扳定,它就会保持状态不变直到游戏结束。因此,火车如果开到了某个曾经进过的车站,就会沿着与之前相同的轨道开出该车站。
由于车站数量是有限的,火车的行驶最终都会落入某个环路。环路是指一系列不同的车站
如果火车能够连续行驶跑个没完,Arezou 就赢了。否则火车最后会把电用光而停车,这样 Borzou 就赢了。换句话说,如果在车站
现在给你一个这样的铁路系统。Arezou 和 Borzou 将会玩
实现细节
本题只支持C++。
你需要实现下面的函数:
std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v)
:长度为 的数组。如果 Arezou 拥有车站 ,则 ;否则 Borzou 拥有车站 ,且 。 :长度为 的数组。如果车站 是充电车站,则 。否则 。 和 :长度为 的数组。对于所有 ,存在某一单向轨道,其起点为 ,终点为 。- 该函数需要返回一个长度为
的数组 。对于每个 ,如果在火车最初停在车站 的游戏中,不管 Borzou 怎么玩,Arezou 都能赢,则 的值 1。否则 的值应为 。
例子
评测程序调用了 who_wins([0, 1], [1, 0], [0, 0, 1, 1], [0, 1, 0, 1])
。
- 这里有
个车站。Borzou 拥有充电车站 。Arezou 拥有车站 ,但是它不是充电车站。 - 这里有
段轨道 和 ,其中 表示一个以车站 为起点、车站 为终点的单向轨道。 - 考虑火车最初停在车站
的游戏。如果 Borzou 车站 的开关扳向轨道 ,那么火车就会沿着这个环形轨道绕个没完(注意,车站 是一个充电车站)。在这种情况下,Arezou 赢。否则,如果 Borzou 把车站 的开关扳向轨道 ,Arezou 可以把车站 的开关扳向轨道 。这样的话,火车将会在两个车站之间绕个不停。Arezou 还是会赢,因为车站 是充电车站,火车将跑个没完。因此,无论 Borzou 怎么玩,Arezou 都会赢。 - 根据类似的逻辑,在火车最初停在车站
的游戏中,无论 Borzou 怎么玩,Arezou 也都会赢。因此,函数应当返回 。
数据范围
。 。- 至少会有一个充电车站。
- 每个车站至少会有一段轨道以它为起点。
- 可能会有某个轨道的起点和终点是相同的(即
)。 - 所有轨道两两不同。也就是说,不存在这样的两个下标
和 ( ),使得 且 。 - 对于所有
,都有 。
子任务编号 | 限制与约定 | 分值 |
---|---|---|
对于所有 |
||
Arezou 拥有所有车站 | ||
Borzou 拥有所有车站 | ||
充电车站的数量为 |
||
无附加限制 |
时间限制:
空间限制:
评分程序样例
评分程序样例会按照下述格式来读取输入数据:
- 第
行: - 第
行: - 第
行: - 第
行(对于所有 ):
评分程序样例会按照下述格式打印出 who_wins
的返回结果:
- 第
行: