题意:给定N个三维平面点,每个点都有一个高度,每两个点之间的需要构边,边的距离由x,y坐标的欧几里得距离确定,边的花费有点的高度差即z值确定,现在问一个合理的生成树中,花费比上距离的最小值为多少?

解法:每一条边对应于一个高度差,设每条边的高度差为Hi,距离为Li,则要求找到一组边集满足,一如既往的,我们假设一个比例R使得有成立,那么对式子变形后有,得到这个式子后,我们就能够将边权进行修改,求一个最小生成树来判定是否满足<=0的要求。由于图是一个稠密图,所以kruskal算法超时了,改成prim后,priority_queue照样超时,最后改成最普通版的才Ac掉。

代码如下:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;int N, idx;
double R;
const double INF = 1e12;const double eps = 1e-6;
double D[1005][1005];
double H[1005][1005];struct Node {int x, y, z;void read() {scanf("%d %d %d", &x, &y, &z);}
}p[1005];inline int sign(double x) {return x < -eps ? -1 : x > eps ? 1 : 0;
}double dist(int x1, int y1, int x2, int y2) {return sqrt(1.0*(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}double dis[1005];
char vis[1005];struct cmp {bool operator () (const int &a, const int &b) {return sign(dis[a] - dis[b]) > 0;}
};bool Ac(double R) {double sum = 0;memset(vis, 0, sizeof (vis));fill(dis, dis+N, 1e12);dis[0] = 0;for (int i = 0; i < N; ++i) {double Min = INF;int u;for (int i = 0; i < N; ++i) {if (!vis[i] && sign(Min-dis[i])>0) {u = i, Min = dis[i];    }}vis[u] = 1;sum += dis[u];for (int v = 0; v < N; ++v) {if (vis[v]) continue;double ct = H[u][v]-R*D[u][v];if (sign(dis[v]-ct) > 0) {dis[v] = ct;}}}return sign(sum) <= 0;
}double bsearch(double l, double r) {double mid, ret;while (r - l >= eps) {mid = (l + r) / 2.0;if (Ac(mid)) {ret = mid;r = mid - eps;} else {l = mid + eps;    }}return ret;
}int main() {while (scanf("%d", &N), N) {for (int i = 0; i < N; ++i) {p[i].read();}idx = 0;for (int i = 0; i < N; ++i) {for (int j = 0; j < N; ++j) {H[i][j] = abs(p[i].z - p[j].z);D[i][j] = dist(p[i].x, p[i].y, p[j].x, p[j].y);}}printf("%.3f\n", bsearch(0, 1e7));}return 0;
}

POJ-2728 Desert King 最优比例生成树 01分数规划/参数搜索相关推荐

  1. poj 2728 Desert King(最小比率生成树 / 0-1分数规划 / 二分)

    二分答案,我们要找最小的答案,如果有更小的答案说明 ∑W−Z∗∑L<=0∑W−Z∗∑L <= 0∑W−Z∗∑L<=0. #include<cstdio> #include ...

  2. POJ 2728 Desert King [最优比率生成树]

    RT 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 凭什么!一模一样的代码一个TLE一个AC,改小二分范围和精度才过 凭什么! 我眼睁睁的看着那段代码 ...

  3. poj 2976 Dropping tests 01分数规划

    题目大意: http://poj.org/problem?id=2976 题解: 裸的01分数规划 #include <cstdio> #include <cstring> # ...

  4. 最优比例生成树(0/1分数规划)

    首先这是要解决什么问题:一个带权完全图,每条边都有自己的花费值cost[i]和收益值benifit[i],如果用x[i]来代表一条边取或不取,那么求一个生成树.要求:r=(∑cost[i]*x[i] ...

  5. 转载二分 01 分数规划即最大化平均值的证明0/1分数规划、最优比率生成树、最优比率环

    首页 新随笔 联系 管理 订阅 随笔- 20  文章- 0  评论- 9 [Algorithm]01分数规划--Update:2012年7月27日 [关键字] 0/1分数规划.最优比率生成树.最优比率 ...

  6. POJ 2728 01分数规划

    题意: 最优比率生成树,要求生成树中的所有边的花费与所有边的长度的比值最小 题解: 01分数规划,详见http://www.cnblogs.com/proverbs/archive/2013/01/0 ...

  7. POJ-3621 Sightseeing Cows 最优比率环、01分数规划

    题目链接:http://poj.org/problem?id=3621 这题是01分数规划问题,详细资料点这里.有了01分数规划的基础后,这个题目就很简单了.构建函数f(mid)=Σ(w[i]-mid ...

  8. poj 3621 Sightseeing Cows 01分数规划

    题目大意: http://poj.org/problem?id=3621 题解: 首先我们容易发现最优的路线一定只经过一个环. 所以我们可以把点权合并到边权上. 然后就转化为了一个01分数规划问题 求 ...

  9. bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)

    01分数规划问题: 给你n个物品,a[i]表示第i个物品的收益,b[i]表示代价,x[i]表示选或不选,求一个最佳方案使得下式取值最大 通用解: 当然是从式子上考虑,定义函数F[cnt]如下: 其中c ...

最新文章

  1. Android学习笔记之AndroidManifest.xml文件解析
  2. 从Go、Swift出发:语言的选择需谨慎
  3. qxidc项目/crtsurfdata程序 杀青总结
  4. mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志
  5. html加上百度统计,vue单页面应用加入百度统计
  6. c malloc 头文件_C/C++求职者必备 23 道面试题,一道试题一份信心!
  7. 腾讯校园招聘笔试 2019-8-17 第四题 另一种解法
  8. 【机器学习】模型优化改进建议
  9. lora 网关 linux,什么是LoRa网关 如何选择一个好的LoRaWAN网关
  10. 李一男起伏人生如高速过山车 栽大跟头后还回得来吗
  11. NoSQLBooster for MongoDB延长使用时间
  12. python制作的简单程序_Python如何制作简易收银小程序
  13. python和java哪个好就业-计算机专业选Java和Python哪个前景好点?
  14. iOS 抽奖程序 可指定版
  15. elementui3
  16. ERROR: Cannot uninstall 'pywin32'.
  17. 『进出口贸易』 [经验交流]外贸朋友们一定进来看看,关于贸易成本核算问题(做人要厚道)
  18. Docker启动MySql时Exited (1) 8 seconds ago或者Error response from daemon: Container xx is not running的解决方法
  19. 碰到Maven依赖冲突脑壳疼?这个工具了解一下
  20. MQ系列传感器电路图

热门文章

  1. 3/3 常用符号:转义字符
  2. 2/2 数据获取:网络数据的获取
  3. C# 读取网页源码的三种办法WebClient、WebRequest、HttpWebRequest
  4. java 对象重写tostring
  5. 回溯法解决工作分配问题及分析
  6. 国内淘宝镜像 cnpm转npm
  7. C#窗体之间事件传值
  8. 推公式hdu2298
  9. [转]c#调用API截图
  10. ecshop的smarty库还原成smarty原生库方法