传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1879
具体代码参见:http://blog.csdn.net/allianzcortex/article/details/42192829,之前在博客中的畅通工程第一序列。
问题分析: 在原来问题的基础上增加了一个标示位,如果flag=1的话说明已经修建过,flag=0的话说明还未被修建,要求最短路程。
我一开始的思路是将已经修剪过的点进行合并,如:1 2,那么只存在一个点,从而将问题简化。
因为Kruscal本身已经用到了并查集,如果要将点合并的话,就需要再一个序列,这是不能接受的。
最后还是参照结题报告,看到题目中的“贪心”,突然间就想起来Kruscal其实就是基于路径最小的贪心算法,那么我们就将已经联通的点wweight置0,在排序时确保一定放在最前面,这样就避免了对距离的讨论。
prim算法也是同样,将距离置0,在比较的时候不可能再小。
还是解题经验的问题啊。~