开始比赛的最短时间

时间:2014-02-24 10:06:59

标签: algorithm graph-theory

在一个拥有M辆自行车的城市(形状为网格)中有N个骑自行车的人。所有骑车人都希望参加比赛,但只有K骑自行车的人可以参加比赛。

为了最大限度地减少开始比赛的时间,骑自行车的人会让自行车在城市中传播,以便在最短的时间内获得第一批K自行车。

每个骑车人以单位速度移动,只有一个骑车人可以获得一辆自行车。骑车人可以向任何方向前进。自行车和骑自行车的距离是欧几里德距离。

尽快开始比赛所需的时间是多少?

示例:假设我们有N = 3表示3个骑车人并且说M = 3意味着3辆自行车是他们的并且假设K = 2意味着我们只需要2个骑车人参加比赛

骑车人的坐标是:(0,1),(0,2),(0,3)

自行车的坐标是:(100,1),(200,2),(300,3)

然后这里的答案将是400 ,因为比赛需要两名骑车人。第一个骑车人(0,1)将能够以100个时间单位到达第一辆自行车(100,1)。第二个骑车人(0,2)将能够以200个时间单位到达第二辆自行车(200,2)。这是最佳解决方案,需要200个时间单位。因此输出将是200 ^ 2 = 40000。

帮助解决这个问题?

约束条件是:N,M <= 250

1 个答案:

答案 0 :(得分:-1)

记下自行车和骑车人之间的M * N边缘。开始一个接一个地扔掉它们,最长到最短,当连接特定自行车(或骑自行车的人)的最后一条边被扔掉时,也消除那辆自行车(或骑车人)。当你无法将K自行车与K骑自行车的人配对时停下来。 (这可以通过例如在每一步运行Hopcroft–Karp algorithm来测试。)

扔掉的最后一条边(它的长度平方)就是你的答案。