摘要: 题目大意是:给你坐标上一些点,然后你需要用一些边把他们连接起来,边有费用和长度,求总费用和总长度最小比值。 二分答案: 每边有两权值(a,b),求∑a/ ∑b最小的生成树. 设∑a/ ∑b=k --> ∑a=k*∑b --->a1+a2+...an = k*(b1+b2+..bn) ---->∑(ai-k*bi)==0 即边权变为a-k*b后求MST,看是否<0,如果<0则说明k太大了。>0说明k太小了。ps:有种迭代的方法。看没太懂。下次看。 1 // File Name: 2728.cpp 2 // Author: Missa 3 // Created 阅读全文
posted @ 2013-02-23 23:11 Missa 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 次小生成树讲的比较详细的:http://www.cppblog.com/MatoNo1/archive/2011/05/29/147627.aspx对于prim算法的三种特殊另外注意三种特殊情况:【1】图G不连通,此时最小生成树和次小生成树均不存在。判定方法:在扩展T的过程中找不到新的可以加入的边;【2】图G本身就是一棵树,此时最小生成树存在(就是G本身)但次小生成树不存在。判定方法:在成功求出T后,发现邻接矩阵中的值全部是无穷大;【3】图G存在平行边。这种情况最麻烦,因为这时代价最小的可行变换(-E1, +E2)中,E1和E2可能是平行边!因此,只有建立两个邻接矩阵,分别存储每两点间权值最小 阅读全文
posted @ 2013-02-23 00:11 Missa 阅读(298) 评论(0) 推荐(0) 编辑