我正在尝试解决此问题https://open.kattis.com/problems/gopher2:
避开犬类威胁的地鼠家族必须面对新的挑战 捕食者。
有?地鼠和?地鼠孔,分别位于不同的(?,?) 坐标。鹰来了,如果地鼠没有到达洞中 ?秒很容易被吃掉。一个洞最多可以节省 一只地鼠。所有地鼠以相同的速度?运转。地鼠 家庭需要一种逃避策略,以尽量减少弱势群体的数量。
t最大限度地减少了脆弱的地鼠的数量。
蛮力方法是找到每个地鼠的所有可能的孔,然后找到所有不同的(地鼠,孔)对。
有更快的算法吗?
答案 0 :(得分:1)
这可以表示为二部图上maximum cardinality matching problem的实例。
让A
是地鼠的集合,B
是孔的集合。如果地鼠a ∈ A
到孔b ∈ B
之间有一条距离,如果它们之间的距离最大为s*v
,即地鼠在可用时间内可以行驶的最大距离。
解决方案由此图中边缘的最大大小子集组成,这样(1)每个a ∈ A
最多具有一个边缘,(2)每个b ∈ B
最多具有一个边缘。约束表示每个地鼠只能进入一个洞且每个洞只能容纳一个地鼠的规则。那么,“弱势”地鼠的数量就是地鼠的数量减去匹配中边缘的数量。
该图需要O( mn )的时间来构建,并且可以使用诸如的标准算法在O( mn )的时间或更短的时间内找到最大基数匹配。 Ford–Fulkerson,其中 m 是地鼠的数量, n 是孔的数量。
如果对于在线判断而言这还不够有效,则可以使用a more efficient algorithm查找匹配项,并且可以使用一种更有效的方法来查找图形中的边,例如使用quadtree来查询在O( n )时间之内地鼠的距离s*v
内的孔。