2

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

这是问题所在:

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 < N

现在下面是我感到困惑的测试用例:

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

4

2 回答 2

4

请注意此处“相邻道路”的定义 - 您不是在寻找机器人仅通过每条道路一次的遍历。

使用该定义,您在此图中有四个“终端道路”,6 10、5 13、2 14 和 7 9 - 它们不能位于序列的中间,因为它们只有一条相邻的道路。这是您可以使用两个机器人(从其中两个开始,到另外两个结束)的第一个迹象。请注意,Byteland 几乎分为两个子国家,只有 4 8 11 是唯一的连接道路,所以你不能让两个机器人在两半之间通过,自然而然的是一个机器人将修理每一半。

从那里开始,构建样本遍历(颜色 - 机器人,数字 - 序列)相当简单,当然有很多,因为您可以反转开始/结束并在两者之间打乱一些顺序

测试用例的示例解决方案

这一切都归功于Graphviz和我的视觉皮层,但无论如何您并没有要求通用解决方案。

于 2012-09-17T04:23:39.790 回答
1

在这个问题中提到,没有两个机器人会修复同一条道路,也没有道路可以访问两次。
1>如果其中一个分支端点的距离大于1,则需要向该方向发送机器人。
2> 端点到任何顶点的距离 =1 然后不需要任何额外的机器人

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

于 2020-06-02T13:06:40.053 回答