#P9466. [EGOI2023] Bikes vs Cars / 骑车与汽车
[EGOI2023] Bikes vs Cars / 骑车与汽车
题目背景
Day 1 Problem D.
题面译自 EGOI2023 bikesvscars。
题目描述
在隆德,骑自行车是一种常见的交通方式,但有时狭窄的街道难以容纳骑车和自行车通行。为了改善这一状况,当地政府希望完全重新设计当地的街道网络。
隆德共有 个关键位置(编号从 到 ),人们常常在其间通行。人们通过一条路径在两地之间通行,其中路径是一系列的街道,从第一个地点到另一个。一种交通工具(车或自行车)可以在一条路径上通行,当且仅当经过的所有街道都至少与它一样宽。每个新修的街道连接关键位置其中之二,有着宽度 。这个宽度可以被任意分割为自行车道和机动车道。在隆德,一些工程师最近发明了宽度为 的车和自行车(它们可以在宽度为 的道路通行)。
这些工程师测量了城市中车和自行车的宽度。对于每一对关键位置,他们知道其间通行的最宽的车和最宽的自行车的宽度,但政府还要求更宽的车和自行车不能在其间通行。
形式化地,对于任意 (),你都知道两个整数 和 。你的任务是构造一个街道网络连接这 个位置。街道的宽度均为 ,但对于任意街道 ,你可以选择它的自行车道宽度 和机动车道宽度 。这个网络必须满足以下要求:
- 必须可以在任意两个位置间通行。这可能需要一辆宽度为 的自行车或车。
- 对于每一对位置 (其中 ),可以只借助宽度至少为 的机动车道,在 间通行。同时, 是最大的有这一性质的数。这意味着,对于所有 间的路径,必须满足至少一条街道的机动车道宽度不超过 。
- 对于每一对位置 (其中 ),可以只借助宽度至少为 的自行车道,在 间通行。同时, 是最大的有这一性质的数。
你能帮隆德政府设计一个这样的街道网络吗?因为预算有限,你可以修建至多 条街道。你可以在同一对关键位置间修建多条街道,但你不能修建一条连接自己和自己的街道。所有街道都是双向的。
输入格式
第一行两个整数 ,表示关键位置数量和街道宽度。
接下来 行包含 。其中的第 行包含所有满足 的 。因此第一行只会包含 ,第二行包含 和 ,第三行包含 ,以此类推。
接下来 行包含 ,格式同 。
输出格式
如果不存在符合要求的街道网络,输出 NO
。
否则,第一行一个整数 ,表示你修建的街道数。
接下来 行,每行三个整数 ,表示一条自行车道宽度为 (机动车道宽度为 )的连接 的街道。
你可以使用至多 条街道。你输出的街道必须满足 , 且 。你可以在同一对关键位置间使用多条街道(可以有不同的自行车道宽度)。
如果有多解,你可以输出任意一个。
2 1
1
1
2
0 1 0
0 1 1
4 1
0
0 1
0 0 1
1
1 1
1 1 1
NO
6 6
5
4 4
1 1 1
1 1 1 3
1 1 1 5 3
2
3 2
6 2 3
3 2 5 3
3 2 4 3 4
8
0 1 1
0 2 3
1 2 2
0 3 6
2 4 5
3 4 3
3 5 1
4 5 4
提示
样例 解释
在样例 中,街道的宽度为 ,我们需要宽度至少为 的自行车道和机动车道各一条连接 。解决方案是用两条分开的街道连接,一条自行车道宽度为 ,另一条机动车道宽度为 。
样例 解释
在样例 中,街道的宽度依然是 ,需要有一条宽度为 的自行车道连接任意两个关键位置,且有宽度为 的机动车道连接 和 。这与 矛盾,不应该有宽度为 的从 到 的机动车道,而我们可以合并两条先前提到的路径组成这样一条路径。因此不可能构造出一个符合要求的街道网络。
样例 解释
在样例 中,下图的街道网络满足所有要求。例如,应该有一条宽度为 的机动车道在 之间(路径 ),一条宽度为 的自行车道在 之间(路径 )。同时,可以验证,不存在路径有着更大的宽度下限。注意样例 可能有很多其他解法。
数据范围
对于全部数据,,,。
- 子任务一( 分):所有 都相同,所有 都相同,。
- 子任务二( 分):所有 都相同,所有 都相同。
- 子任务三( 分):。
- 子任务四( 分):。
- 子任务五( 分):所有 都相同。
- 子任务六( 分):无特殊限制。