范围内的连通城市数量

时间:2018-09-16 19:37:34

标签: algorithm graph graph-algorithm

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

我们需要回答Q个查询。 每个查询的格式均为L RX。它查询从A的L和R之间的城市X可以到达的城市X的城市数量(1-索引)。每个城市都有一个加油泵,因此您可以假设到达时会补充燃料。

示例:

  

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

     

Q1 = 1 3 6 =>(3)

     

Q2 = 1 5 3 =>(4)

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

第二季度,您可以从城市3前往除城市9之外的所有城市。

约束:

  

N <= 10 ^ 5和Q <= 10 ^ 5和K <= 10 ^ 8

如何解决此问题?显然,不可能从每个X进行DFS / BFS,因为它非常昂贵并且会超时。我尝试过使用“不相交集”来加入彼此之间K距离内的城市,但我对此并不十分清楚。

感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:4)

我推荐:

  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)。