有N个村庄,给出每个村庄的坐标和海拔,,benifit为两点之间的距离,cost为两点的高度差,现在要求一棵树使得 cost / benift 最小,即求一个最优比例生成树
做这道题建议先做一下POJ3621 Sightseeing Cows 最短路求最优比率生成环。
A[i]为1是选择这条边,0是不选
我们求 ∑(cost(i)*A(i))/∑(benifit(i)*A(i))>=ans;
求最小的ans
∑(cost(i)*A(i))>=ans*∑(benifit(i)*A(i))
∑(cost(i)*A(i))-ans*∑(benifit(i)*A(i))>=0
cost(i)-ans*benifit(i)就是我们要建立的边了
ans是我们要枚举的答案。
求最小生成树如果小于0,说明ans偏大,变小点。如果大于0相反。 如果等于0,也就是我们找到了一条最短路满足这个公式。输出即可。