在ACM ICPC 2018世界总决赛中捕捉飞机问题

时间:2018-12-18 16:19:43

标签: algorithm math acm-icpc

我正在考虑几天的this problem算法。我想出了不同的解决方案,但没有一个得到正确的输出。我正在考虑有向无环图,但似乎乘客可以往返,例如,从车站0到3,然后从3到0,然后从0到1。如果有人能描述一下,我将不胜感激。此问题的算法(而非代码)。为了便于查找,我也将问题放在这里。

  

您前往ICPC决赛的飞机将在短时间内起飞,这是唯一   到达机场的方式是乘公共汽车。不幸的是,一些公共汽车   驾驶员正在考虑进行罢工,所以您不知道是否   您可以准时到达机场。您的目标是计划行程   以最大程度地抓住您的飞机的方式。   您有一张详细的城市地图,其中包括所有巴士   站。您在0号车站,机场在1号车站。您   还具有每辆巴士何时出发的完整时间表   站并到达其目标站。此外,对于每个   公交车,您知道它实际将以   预定,而不是司机罢工和乘公共汽车   中止服务。假设所有这些事件都是独立的。那就是   如果您指定的公交车按计划运行的可能性不变   知道是否有其他公交车按计划运行。如果你到达   在公共汽车出发时间之前,您可以转移到该公共汽车。但   如果您正好在出发时间到达,您将没有足够的时间   该坐公交车了。您无法提前验证是否   给定的公交车将按计划运行-您只有在尝试   坐上大巴。因此,如果有两辆或多辆公交车在同一地点离开车站   时间,您可以尝试只参加其中之一。

     

输入

     

城市中的车站数量。下一行包含一个整数k   (1≤k≤10 ^ 18),表示您必须到达的时间   飞机场。接下来的m条线中的每条描述一条总线。每行   包含整数a和b(0≤a,b      

输出

     

显示假设您接住飞机的概率   遵循最佳行动方案。您的答案必须正确   绝对误差在10 ^ −6之内。

     

示例输入

8 4
1000
0 1 0 900 0.2
0 2 100 500 1.0
2 1 500 700 1.0
2 1 501 701 0.1
0 3 200 400 0.5
3 1 500 800 0.1
3 0 550 650 0.9
0 1 700 900 0.1
     

示例输出

0.3124
     

输入的第一行包含两个整数m(1≤m≤10 ^ 6)和n   (2≤n≤10 ^ 6),表示公交车的数量和

1 个答案:

答案 0 :(得分:2)

考虑与每个预定行程相关的到达事件。

如果您参加了一次到达,即如果您实际上成功地完成了计划的行程,那么您将在到达时间到达车站,然后决定从那里做什么。

对于每个到达目的地,如果您已经知道可能到达下一个到达地点的最佳概率,则可以轻松计算出进行飞行的最佳概率。

由于您可能到达下一个到达的地点都是以后,因此,如果您按相反的时间顺序处理所有可能到达的地点,则可以使用以下方法计算出每次到达之后的最佳飞行概率:仅是您已经计算出的概率。

该过程以您最初到达站点0的最佳可能性结束。

如果您聪明地实施,那么整个过程将花费O(N log N)的时间。