连续N辆车的编号从1到N. 一个人拍摄汽车的M照片。对于每张照片,出现在其中的汽车由元组(i,j)给出,这意味着从第i辆汽车到第j辆汽车的所有汽车都将出现在该照片中。
请注意,所有照片都不需要覆盖每辆车。汽车可以出现在多张照片中。
每张照片都包含正好1 的紫色汽车。找到可能的紫色车的最大数量。如果不可能打印-1。
输入:第一行包含N和M.下一行包含M对(x,y),它们代表包含从第x辆车到第0辆车的汽车的照片。 输出:可能的紫色车辆的最大数量。
示例:
输入:
5 1
(3 5)
输出:3
说明:只有一辆3到5的车可以是紫色的。汽车1和汽车2将是紫色的,以最大化紫色汽车的数量。
输入:
5 1
(4 4)
输出:5
输入:
5 3
(1 4),(3 5),(3,4)
输出:1
说明:3或4可以是紫色车。
输入:
5 2
(1,4),(2,5)
输出:2
说明:Car 1和Car 5可以是紫色。
输入:
10 3
(1 5),(6,10),(1,10)
输出: - 1
说明:在这种情况下,每个区间都不可能只有一辆紫色车。
答案 0 :(得分:1)
如果我没有弄错的话,问题可以解决为网络问题如下。
网络的节点集具有源节点s
和终端t
;想象最左边位置的水槽和最右边的终端,流程从左到右。在s
旁边为每辆车放置一个节点,并将s
连接到每辆车。汽车节点旁边为每个间隔创建一个节点。现在从汽车节点开始,创建t
的路径,遍历间隔节点集;路径经过包含汽车的每个区间。
除了s
和t
之外,每个节点中的流量都被限制为1
,每个区间的1
汽车必须是紫色的;弧明确地不需要受到约束。最后通过一些网络流算法,最大化从s
到t
的流量强度。为每个车辆的紫色着色,其节点具有非零流量。如果实例不允许可行流,则初始问题实例是不可行的。
答案 1 :(得分:1)
请注意,如果有一张完全由另一张照片覆盖的照片,我们只需关心外部照片(无关紧要)。
第二次观察:
目前,在删除所有已覆盖的照片后(如上所述),我们将留下这样的案例:
我们有n张照片,可以分为几组,每组都是一组m张照片:(a1, b1) , (a2, b2) ... , (am, bm)
a1 < a2 and b1 > a2 ... or ai < a(i + 1) and bi > a(i + 1)
我们注意到,如果我们为第一张照片选择第一辆紫色汽车在(a1, a2)
范围内,并且继续以这种方式选择汽车(第一个尚未覆盖的范围),它总是最佳的任何车)。证明:
(a1, a2)
范围内的汽车,那么可以选择的下一辆车将在(b1 , bm)
范围内,否则,如果我们选择其他车辆(范围(a2,b1)
),选择下一辆车的范围将是更小的范围(平凡看到),因此,选择范围(a1, a2)
中的车将获得最佳结果。如果我们实施扫描线算法,时间复杂度将 O(m log m)
注意:此算法仅在照片集有效时有效,否则我们需要检查其有效性。
更新:正如PeterdeRivaz指出的那样,我们需要处理一个特例:当有两张或更多照片时,两张照片都覆盖了一张照片,因此,我们需要加入所有这些照片