一个完全图,每两个点之间的cost是海拔差距的绝对值,长度是平面欧式距离,

让你找到一棵生成树,使得树边的的cost的和/距离的和,比例最小

然后就是最优比例生成树,也就是01规划裸题

看这一发:http://blog.csdn.net/sdj222555/article/details/7490797

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<math.h>
  4. #include<queue>
  5. #include<string.h>
  6. using namespace std;
  7. const int N=1e3+;
  8. const double eps=1e-;
  9. const int INF=0x3f3f3f3f;
  10. int n;
  11. double x[N],y[N],z[N];
  12. double cost[N][N],dis[N][N];
  13. bool vis[N];
  14. double d[N];
  15. double mst(double x) {
  16. memset(vis,false,sizeof(vis));
  17. vis[]=true;
  18. for(int i=; i<=n; ++i) {
  19. d[i]=cost[][i]-x*dis[][i];
  20. }
  21. double ret=;
  22. for(int i=;i<n;++i){
  23. int u;
  24. double mx=INF;;
  25. for(int j=;j<=n;++j)
  26. if(!vis[j]&&mx>d[j]){
  27. mx=d[j];
  28. u=j;
  29. }
  30. ret+=mx;
  31. vis[u]=true;
  32. for(int j=;j<=n;++j)
  33. if(!vis[j]&&d[j]>cost[u][j]-x*dis[u][j])
  34. d[j]=cost[u][j]-x*dis[u][j];
  35. }
  36. return ret;
  37. }
  38. int main() {
  39. while(~scanf("%d",&n)) {
  40. if(n==)break;
  41. for(int i=; i<=n; ++i) {
  42. scanf("%lf%lf%lf",&x[i],&y[i],&z[i]);
  43. for(int j=; j<i; ++j) {
  44. dis[i][j]=dis[j][i]=sqrt(1.0*(x[i]-x[j])*(x[i]-x[j])+1.0*(y[i]-y[j])*(y[i]-y[j]));
  45. cost[i][j]=cost[j][i]=fabs(z[i]-z[j]);
  46. }
  47. }
  48. double r=200000.0,l=0.0,mid;
  49. while(r-l>eps) {
  50. mid=(l+r)/2.0;
  51. if(mst(mid)>=)l=mid;
  52. else r=mid;
  53. }
  54. printf("%.3f\n",mid);
  55. }
  56. return ;
  57. }

POJ 2728 Desert King 01分数规划,最优比率生成树的更多相关文章

  1. POJ 2728 Desert King (01分数规划)

    Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissions:29775   Accepted: 8192 Descr ...

  2. POJ 2728 Desert King ★(01分数规划介绍 && 应用の最优比率生成树)

    [题意]每条路径有一个 cost 和 dist,求图中 sigma(cost) / sigma(dist) 最小的生成树. 标准的最优比率生成树,楼教主当年开场随手1YES然后把别人带错方向的题Orz ...

  3. POJ 2728 Desert King | 01分数规划

    题目: http://poj.org/problem?id=2728 题解: 二分比率,然后每条边边权变成w-mid*dis,用prim跑最小生成树就行 #include<cstdio> ...

  4. poj2728 Desert King(最小生成树+01分数规划=最优比率生成树)

    题意 n个点完全图,每个边有两个权值,求分数规划要求的东西的最小值. (n<=1000) 题解 心态炸了. 堆优化primT了. 普通的就过了. 我再也不写prim了!!!! 咳咳 最优比率生成 ...

  5. 【usaco-Earthquake, 2001 Open】 0-1分数规划 & 最优比率生成树

    题意:给定n个点m条边,一开始这些边全都是断的,要修一些边使得n个点全部联通.修完一共可以得到F元,修一条边有成本di和时间ti,要使得 得到的钱数 / 总时间 这个比值最大. 参考资料: 红线内的内 ...

  6. poj2728 Desert King——01分数规划

    题目:http://poj.org/problem?id=2728 第一道01分数规划题!(其实也蛮简单的) 这题也可以用迭代做(但是不会),这里用了二分: 由于比较裸,不作过多说明了. 代码如下: ...

  7. 【POJ2728】Desert King - 01分数规划

    Description David the Great has just become the king of a desert country. To win the respect of his ...

  8. poj2728 Desert King --- 01分数规划 二分水果。。

    这题数据量较大.普通的求MST是会超时的. d[i]=cost[i]-ans*dis[0][i] 据此二分. 但此题用Dinkelbach迭代更好 #include<cstdio> #in ...

  9. 【POJ2728】Desert King(分数规划)

    [POJ2728]Desert King(分数规划) 题面 vjudge 翻译: 有\(n\)个点,每个点有一个坐标和高度 两点之间的费用是高度之差的绝对值 两点之间的距离就是欧几里得距离 求一棵生成 ...

随机推荐

  1. hdu 4696 Answers

    思路:由于c[i]要么是1,要么是2.所以当c[i]中没有1的时候就不可能得到奇数: 再就是如果m<=0,也不可能得到. 代码如下: #include<cstdio> #includ ...

  2. Android ListView点击失效

    item中存在 ImageButton 等可以点击的组件,这会抢先获得ListView的焦点. 从而导致item点击失效

  3. Android 用Activity的onTouchEvent来监听滑动手势

    package com.example.activityOnTouchEvent; import android.app.Activity; import android.os.Bundle; imp ...

  4. Ubuntu 12.04LTS 找不到eth0网卡

    我的机器是DELL 14R INSPRION 7420 笔记本.试了好多方法都不行,比如这个教程: . sudo ifconfig -a //查看所有网卡现状,看eth0是否存在,在结果列表应该找不到 ...

  5. lintcode:Number of Islands 岛屿的个数

    题目: 岛屿的个数 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 样例 在矩阵: [ [1, 1, 0, 0, 0], ...

  6. lintcode 中等题:Max Points on a Line 最多有多少个点在一条直线上

    题目 最多有多少个点在一条直线上 给出二维平面上的n个点,求最多有多少点在同一条直线上. 样例 给出4个点:(1, 2), (3, 6), (0, 0), (1, 3). 一条直线上的点最多有3个. ...

  7. 字符编解码的故事–ASCII,ANSI,Unicode,Utf-8区别(转)

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们认为8个开关状态作为原子单位很好,于是他们把这称为”字节”. 再后来,他们又做了一些可以处理这些字节的 ...

  8. 基于Struts2框架实现登录案例 之 程序国际化

    国际化牵涉的知识非常多,这里只能简单的介绍,程序国际化的一般做法是:在jsp页面时, 不是直接输出信息,而是输出一个key值,该key值在不同语言环境下找到对应资源文件下的 对应信息,因此首先要创建满 ...

  9. QTP鼠标点击和浏览器事件的动态切换

    今天在群里有人问到一个问题,我觉得应该会有很多人会碰到,今天根据自己的思路把这个解决方案整理出来,供自己和大家参考 需求描述: 当输入一个身份证号码的时候,这个号码所对应的数据会被加载到所属的省和市的 ...

  10. java中的toString方法

    对于我这种用惯了C++的人来说,突然见到有人写java程序的时候竟然将整数和String类型的变量使用+连接到一起,感到非常奇怪,追究了下原因. 原来所有的java对象都有toString()方法,而 ...