我正在尝试解决以下难题。我对其中一个测试用例感到困惑。
问题在于:
Byteland的国家包含N个城市和它们之间的N - 1双向道路,因此任何两个城市之间都有一条路径。 Byteland的道路很久以前建成,现在需要维修。你被雇来修理所有的道路。您打算通过在某些道路上派遣机器人来实现此目的。每个机器人将修复他当前所在的道路,然后移动到相邻的未修复道路之一。在修好之后,他将移动到另一条相邻的未修复道路,修复等等。
如果两条道路在其中一个终点处拥有相同的城市,则它们相邻。为了使过程高效,没有两个机器人可以修复同一条道路,也不能两次访问道路。完成任务所需的机器人数量最少?
输入: 第一行包含测试用例的数量T.T测试用例如下。每个测试用例的第一行包含N,即Byteland中的城市数量。城市编号为0..N - 1.以下N - 1行包含道路描述。第i行包含两个整数ai和bi,这意味着有一条连接城市的道路与数字ai和bi。
输出: 输出T行,一行对应于每个测试用例,包含该测试用例的必需答案。
约束:
1< = T< = 20
1 <= N <= 10000
0 <= ai,bi&lt; Ñ
现在bolow是我感到困惑的测试案例:
1
15个
0 11
1 7
1 11
2 11
2 14
3 4
4 10
4 13
4 8
5 13
6 10
7 9
8 11
11 12
正确答案是2,但为什么?
答案 0 :(得分:4)
注意这里“邻近道路”的定义 - 你不是在寻找机器人只经过一次道路的遍历。
使用该定义,您在此图中有4条“终点道路”,6 10,5 13,1 2 14和7 9 - 这些不能位于序列的中间,因为它们只有一条相邻的道路。这是第一个迹象表明你可以使用两个机器人(从两个机器人开始,到另外两个机器人结束)。请注意,Byteland几乎被分成两个子区域,其中4 8 11是唯一的连接道路,因此您不能让两个机器人在两半之间通过,这样一个机器人就可以修复每一半。
从那里开始,构建一个样本遍历(颜色 - 机器人,数字 - 序列)是相当简单的,当然有很多,因为你可以反向开始/结束并在之间改变一些顺序
全部归因于Graphviz和我的视觉皮层,但无论如何你都没有要求一般的解决方案。
答案 1 :(得分:1)
在这个问题中提到,没有两个机器人将修复同一条道路,并且两次都无法访问任何道路。
1>如果距离
分支之一的端点大于向该方向发送机器人所需的端点。
2>端点到任何顶点= 1的距离,则不需要任何额外的机器人