任何人都可以解释“修复道路”这个难题的测试用例吗?

时间:2012-09-17 04:03:05

标签: algorithm graph programming-languages

我正在尝试解决以下难题。我对其中一个测试用例感到困惑。

问题在于:

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,但为什么?

2 个答案:

答案 0 :(得分:4)

注意这里“邻近道路”的定义 - 你不是在寻找机器人只经过一次道路的遍历。

使用该定义,您在此图中有4条“终点道路”,6 10,5 13,1 2 14和7 9 - 这些不能位于序列的中间,因为它们只有一条相邻的道路。这是第一个迹象表明你可以使用两个机器人(从两个机器人开始,到另外两个机器人结束)。请注意,Byteland几乎被分成两个子区域,其中4 8 11是唯一的连接道路,因此您不能让两个机器人在两半之间通过,这样一个机器人就可以修复每一半。

从那里开始,构建一个样本遍历(颜色 - 机器人,数字 - 序列)是相当简单的,当然有很多,因为你可以反向开始/结束并在之间改变一些顺序

Example solution for test case

全部归因于Graphviz和我的视觉皮层,但无论如何你都没有要求一般的解决方案。

答案 1 :(得分:1)

在这个问题中提到,没有两个机器人将修复同一条道路,并且两次都无法访问任何道路。
1>如果距离 分支之一的端点大于向该方向发送机器人所需的端点。
2>端点到任何顶点= 1的距离,则不需要任何额外的机器人

https://i.stack.imgur.com/o7zm6.png