Facebook编程挑战 - ByteLand

时间:2013-01-18 04:23:26

标签: facebook algorithm

ByteLand Byteland由编号为1..N的N个城市组成。连接一些城市的M条道路。有两个军队师,A和B,保护王国。每个城市都受到军队A或陆军师B的保护。

你是敌人王国的统治者,并制定了摧毁Byteland的计划。你的计划是摧毁Byteland的所有道路,扰乱所有的沟通。如果你攻击任何一条道路,来自这两条道路连接的城市的军队都会进行防御。你意识到,如果来自A和B军队的士兵都在捍卫任何道路,你的攻击就会失败。

所以你决定在执行这个计划之前,你将攻击一些城市并击败位于城市的军队,以使你的计划成为可能。但是,这要困难得多。你估计击败位于城市的军队我会占用大量的资源。你现在的目标是决定攻击哪个城市,以便你的成本最低,并且不应该保护军队不受军队A和B的攻击。

----请告诉我这种方法是否正确----

我们需要根据破坏城市所需的资源对城市进行分类。对于每个城市,我们需要提出以下问题:

1)删除前一个城市是否导致可以破坏Byteland的状态?

2)它连接任何道路吗?

3)它是否连接了由不同城市武装的任何道路?

如果所有这些条件都成立,我们将继续摧毁城市并记录到目前为止所发生的总成本,并确定这座城市的毁坏是否会导致Byteland的全面破坏。

由于城市按照所发生成本的递增顺序排列,我们可以在任何找到所需删除的地方停止。

2 个答案:

答案 0 :(得分:2)

你只需关心连接两个不同军队城市的道路 - A和B之间的链接或B和A之间的链接,所以让我们删除从A到A或B到B的所有链接。

您希望找到一组点,使每个链接上至少有一个点,这是一个最小权重顶点覆盖。在任意图表上,这将是NP完全的。但是,您的图形只有A类节点链接到B类节点,反之亦然 - 它是一个二分图,这两类节点作为双方。因此,您可以通过使用算法在二分图上查找最小权重顶点覆盖来找到最小权重顶点覆盖。搜索这个,我发现例如http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2008/assignments/sol5.pdf

答案 1 :(得分:1)

mcdowella,

但是顶点对它们有成本,并且最小顶点覆盖不会产生要移除的右顶点。想象一下2个顶点(A军队)指向第三个(B)。前两个顶点每个花费1个,其中第三个顶点花费5.最小顶点覆盖将返回第三个 - 但删除第三个顶点比花费成本1 + 1删除两个节点花费更多。

我们可能需要一些最小顶点覆盖的修改版本。