哈萨克斯坦有
哈萨克斯坦的所有定居点通过一个双向公路网络连接在一起。每条公路连接
每个小城镇只能与另外一个定居点直接相连,而大城市与
下图给出了一个由
每条公路的长度都是一个正整数。两个定居点之间距离是从一个定居点走到另一个定居点所经过的所有公路长度之和的最小值。
对于大城市
在上例中,离大城市
删除某个中心城市后,整个网络会分成几个连通子图,如果每个子图中至多包含
在上例中,大城市
任务
最初,整个网络的唯一信息只有小城镇的数目
你的任务是确定:
- 在所有的子任务中:距离
。 - 子任务
到 :网络中是否存在平衡的中心城市。
你需要实现函数 hubDistance
。Grader 将会在一次运行中评测多个测试点。每次运行时最多有 hubDistance
恰好一次。请确保你的函数在每次被调用时都初始化所有需要的变量。
hubDistance(N, sub)
- N: 小城镇的数目。
- sub: 子任务编号(详见子任务描述部分)。
- sub是
或者 时,该函数返回 或 均可。 - sub大于
时,如果存在平衡的中心城市,该函数返回 ,否则返回 。
你的 hubDistance
函数可以通过调用 grader 函数 getDistance(i, j)
而获得关于公路网络的信息。函数 getDistance(i, j)
返回小城镇
子任务
对每个测试点而言:
你调用 getDistance(i, j)
函数查询的次数是有一定限制的。该限制与子任务有关,详见下表。如果你的程序调用的次数超过限制,你的程序将会被终止,且视为答案错误。
子任务 | 分数 | 查询次数限制 | 是否查找平衡中心城市 | 限制 |
---|---|---|---|---|
1 | 13 | 否 | 无 | |
2 | 12 | 否 | 无 | |
3 | 13 | 是 | 无 | |
4 | 10 | 是 | 每个大城市都刚好与 | |
5 | 13 | 是 | 无 | |
6 | 39 | 是 | 无 |
注意:
实现细节
你只能提交一个源文件实现如上所述的 hubDistance
函数,并且遵循下面的命名和接口。你需要包含头文件 towns.h。
int hubDistance(int N, int sub);
评测方式
请注意子任务的编号也是输入的一部分。grader 根据子任务的编号而改变它评分的方法。
- 第
行:子任务编号和测试点的数目。 - 第
行: ,第一个测试点中小城镇的数目。 - 接下来的
行:第 行( )第 个( )数字是小城镇 到小城镇 的距离。 - 随后是下一个测试点的数据,格式与第
个测试点的数据相同。
对于每个测试点,grader 会在不同行上输出函数 hubDistance
的返回值及调用函数的次数。
本题样例的输入格式如下:
1 1 11 0 17 18 20 17 12 20 16 23 20 11 17 0 23 25 22 17 25 21 28 25 16 18 23 0 12 21 16 24 20 27 24 17 20 25 12 0 23 18 26 22 29 26 19 17 22 21 23 0 9 21 17 26 23 16 12 17 16 18 9 0 16 12 21 18 11 20 25 24 26 21 16 0 10 29 26 19 16 21 20 22 17 12 10 0 25 22 15 23 28 27 29 26 21 29 25 0 21 22 20 25 24 26 23 18 26 22 21 0 19 11 16 17 19 16 11 19 15 22 19 0
时间限制:
空间限制: