【问题标题】:Number of connected cities in a range一个范围内连接的城市数量
【发布时间】:2018-09-16 19:37:34
【问题描述】:

数组 A 中有 N 个城市。还有一辆自行车最多可以在城市之间行驶 K 个单位。

有我们需要回答的 Q 查询。 每个查询都有 L R X 的形式。它询问从城市 X 可到达的城市数量,这些城市位于 A 中的 L 和 R 之间(1 - 索引)。每个城市都有一个汽油泵,因此您可以假设燃料在到达时会得到补充。

例子:

A = [4, 3, 1, 9, 6], K = 2

Q1 = 1 3 6 => (3)

Q2 = 1 5 3 => (4)

在第一季度,你可以从城市 6 到城市 4,然后到城市 3,再到城市 1。

Q2,从3号城市你可以去除9号城市以外的所有城市。

约束:

N

我该如何解决这个问题?显然不可能从每个 X 执行 DFS / BFS,因为它非常昂贵并且会超时。我尝试考虑不相交集来连接彼此相距 K 距离内的城市,但我对此并不太清楚。

感谢任何帮助。谢谢!

【问题讨论】:

  • 我投票结束这个问题,因为它属于Computer Science Stack Exchange
  • 人们已经看到了这个问题,也有一些投票和答案。你也可以在 StackOverflow 上看到几个这样的相关问题,所以我认为不应该删除它。

标签: algorithm graph graph-algorithm


【解决方案1】:

我推荐:

  1. 按城市位置对城市进行排序:[4, 3, 1, 9, 6] -> [1,3,4,6,9]
  2. 通过它进行线性扫描,您可以确定哪些城市集可以相互访问。根据城市所在的组标记城市:[1,1,1,1,2]
  3. 根据起始城市的标签为每个查询添加标签
  4. 将所有标签为 1 的城市添加到细分树中
  5. 使用分段树回答所有标签 1 查询
  6. 从段树中删除标签 1 城市

然后对每个标签重复步骤 4、5、6。

这应该给出 O(NlogN)+O(QlogN) 的总复杂度。

【讨论】:

  • 不错的解决方案。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2011-05-01
  • 2011-07-29
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多