在日本,城市是用一个高速公路网络连接起来的。这个网络包含
使用每条高速公路都要收费。每条高速公路的收费都会取决于它的交通状况。交通状况或者为顺畅,
或者为繁忙。当一条高速公路的交通状况为顺畅时,费用为
你有一部机器,当给定所有高速公路的交通状况后,它就能计算出在给定的交通状况下,在两个城市
然而,这台机器只是一个原型。所以
实现细节
你需要实现下面的过程:
find_pair(int N, int[] U, int[] V, int A, int B)
N
: 城市的数量。U
及V
: 长度为 的数组,其中 为连接城市的高速公路的数量。对于每个 ( ),高速公路 连接城市U[i]
和V[i]
。A
: 交通状况顺畅时高速公路的收费。B
: 交通状况繁忙时高速公路的收费。- 对于每个测试样例,该过程会被调用恰好一次。
- 注意,
为数组的长度,可以按照注意事项的相关内容来取得。
过程 find_pair
可以调用以下函数:
int64 ask(int[] w)
w
的长度必须为 。 数组w
描述高速公路的交通状况。- 对于每个
( ),w[i]
表示高速公路 的交通状况。w[i]
的值必须为 或 。w[i] = 0
表示高速公路 的交通状况为顺畅。w[i] = 1
表示高速公路 的交通状况为繁忙。
- 该函数返回的是,在
w
所描述的交通状况下,在城市 和 之间旅行所需的最少总费用。 - 该函数最多只能被调用
次 (对于每个测试样例)
find_pair
应调用以下过程来报告答案:
answer(int s, int t)
s
和t
的值必须为城市 和 (两者的先后次序并不重要)。- 该过程必须被调用恰好一次。
如果不满足上面的条件,你的程序将被判为 ask
的调用次数来计算(参见子任务)。
例子
设
评测程序调用 find_pair(4, [0, 0, 0, 1], [1, 2, 3, 2], 1, 3)
。
上图中,编号为 ask
的可能调用和对应的返回值如下表所示:
调用 | 返回值 |
---|---|
| |
| |
| |
| |
对于函数调用
对于一个正确的解答来说,过程find_pair
应调用answer(1, 3)
或answer(3, 1)
。
在样例数据下载中的文件ex_highway1.in
对应于本例。其他的输入样例在样例包中还可找到。注意:样例包中的输出没有任何意义。
限制条件
- 对于每个
且 ( )- 你可以从任何一个城市出发,通过高速公路到达其他任何一个城市。
在本题中,评测程序不是适应性的。意思是说,在评测程序开始运行的时候
子任务
- (5 分)
或 有一个是 , , - (7 分)
或 有一个是 , - (6 分)
, , ( ) - (33 分)
- (18 分)
, - (31 分) 没有附加限制。
假设你的程序被判为 ask
调用了
- 子任务 1:
. - 子任务 2: 如果
, 。否则 。 - 子任务 3: 如果
, 。否则 。 - 子任务 4: 如果
, 。否则 。 - 子任务 5: 如果
, 。否则 。 - 子任务 6:
- 如果
, 。 - 如果
, 。 - 如果
, 。
- 如果
注意,你在每个子任务上的得分,等于你在该子任务中所有测试样例上的最低得分。
请注意:在测试中,如果你的程序在一个子任务中某个点未获得满分,则可能会得到
评测程序示例
评测程序示例将读取如下格式的输入:
- 第
行: - 第
行 ( ):
如果你的程序被判为ask
被调用的次数。
如果你的程序被判为
answered not exactly once
:过程answer
没有被调用恰好一次。w is invalid
:传给函数ask
的w
的长度不是 ,或者某个 ( )上的w[i]
既不是 也不是 。more than 100 calls to ask
:函数ask
的调用次数超过 100 次。{s, t} is wrong
:调用answer
时的s
和t
是错的。
约定及限制
对于所支持的各种编程语言,下面列出了对应的数据类型。对于数据类型的细节等,参见实现示例。
语言 | 数组 |
||||
---|---|---|---|---|---|
时间限制:
空间限制: