【发布时间】:2012-05-04 05:55:24
【问题描述】:
我从 interviewstreet.com 遇到了这个问题
机器再次袭击了锡安王国。王国 Xions 拥有 N 个城市和 N-1 条双向道路。路网是 这样任何一对城市之间都有一条独特的路径。
Morpheus 得知 K Machines 计划摧毁 整个王国。这些机器最初生活在 K 不同 王国的城市,从现在起他们可以随时计划和启动 攻击。所以他要求尼奥破坏一些道路来扰乱 机器之间的连接,即在摧毁那里的那些道路之后 不应该是任何两台机器之间的任何路径。
既然攻击可以在以后的任何时间进行,Neo 不得不做这个任务 尽可能快。王国中的每条道路都需要一定的时间 被摧毁,它们一次只能被摧毁一个。
你需要编写一个程序告诉 Neo 最少的时间 他将要求中断机器之间的连接。
示例输入输入的第一行包含两个,空格分隔 整数 N 和 K。城市编号为 0 到 N-1。然后按照 N-1 行,每行包含三个以空格分隔的整数 x y z,其中 表示有一条双向道路连接城市 x 和城市 y,并且 摧毁这条路需要 z 个单位的时间。然后按照K线 每个都包含一个整数。第i个整数是第i个城市的id 机器当前位于。
输出格式在一行中打印所需的最短时间 中断机器之间的连接。
示例输入
5 3 2 1 8 1 0 5 2 4 5 1 3 4 2 4 0样本输出
10解释 Neo 可以摧毁连接城市 2 和城市 4 的道路 权重为 5 ,连接城市 0 和城市 1 的道路权重为 5。如 一次只能摧毁一条道路,所需的总最短时间 是 10 个时间单位。在摧毁这些道路后,没有任何机器 可以通过任何路径到达其他机器。
约束
2 <= N <= 100,000 2 <= K <= N 1 <= time to destroy a road <= 1000,000
有人能告诉我如何解决这个问题吗?
【问题讨论】:
-
这里提示:如果有
N顶点和N-1边,并且图仍然是连通的(没有“岛”),那么图是一条直线. -
您对我的回答的评论是正确的 - 上述条件并不意味着直线图。我暂时删除了我的答案。
标签: algorithm graph spanning-tree