【发布时间】:2012-06-19 08:46:30
【问题描述】:
我们得到一个图 G(V,E),它有 N 个节点(编号从 0 到 N-1)并且正好是 (N-1)双向边.
图中的每条边都有一个正成本 C(u,v)(边权重)。
整个图是这样的:任何一对节点之间都有唯一的路径。
我们还得到了一个节点号列表L,炸弹被放置在该列表中。
我们的目标是损坏/移除图表中的边缘,这样,在损坏/移除图表中的边缘后,炸弹之间就没有联系了 --
即伤害后,任意两颗炸弹之间没有路径。
破坏边缘的成本(u,v) = 边缘权重(u,v)。
所以,我们必须破坏这些边缘,以使总破坏成本最小。
例子:
Total Nodes=N=5
Total Bomb=Size of List L=3
List L={2,4,0}//Thats is at node number 2,4 and 0 bomb is placed...
Total Edges =N-1=4 edges are::
u v Edge-Weight
2 1 8
1 0 5
2 4 5
1 3 4
In this case the answer is ::
Total Damaging cost =(Edge Weight (2,4) + Edge Weight(0,1))
=5+5=10.
So when we remove the edge connecting node (2,4),
and the edge connecting node (0,1) ,there is no connection left
between any pair of machines in List {2,4,0};
Note any other,combinations of edges(that we damaged ) to achieve the
target goal ,needs more than 10 unit cost.
Constraints::
N(ie. Number of Nodes) <= 100,000
ListSize |L|(ie. Number of Bombs) <= N
1 <=Edge cost(u,v) <= 1000,000
我做了什么?
到目前为止,我还没有找到任何有效的方法:( .
进一步,由于节点的数量是N,边的数量正好是N-1,并且整个图是这样的,在任何一对节点之间都有一条唯一路径,我得出的结论是图是一棵树。
我尝试修改 Kruskal 算法,但也没有用。
谢谢!
【问题讨论】:
-
我相信贪婪的方法(删除每条路径中的最低顶点)在树中有机会,但还不确定:\ 另外:你会发现什么是一种有效的方法?
-
@amit,直到现在我还没有找到任何有效的方法来解决这个问题。约束节点数=100,000,这意味着总边数=100,000-1。所以 O(n log n) 算法会很方便和高效。
-
@All:: 将约束添加为编辑。
-
如果图是全连接的,它是树,否则它可以是普通图。
标签: algorithm graph multiway-tree