这题数据量较大。普通的求MST是会超时的。

d[i]=cost[i]-ans*dis[0][i]

据此二分。

但此题用Dinkelbach迭代更好

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 1010 double mp[N][N],c[N][N],x[N],y[N],z[N],e[N][N],d[N];
int vis[N],n; inline double prim(double mid)
{
double tmp,ans=0;
for(int i=0;i<n;i++)
{
vis[i]=0;
for(int j=0;j<i;j++)
e[i][j]=e[j][i]=c[i][j]-mid*mp[i][j];
}
for(int i=1;i<n;i++)
d[i]=e[0][i];
d[0]=0;vis[0]=1;
for(int i=1;i<n;i++)
{
int p;
tmp=100000000;
for(int j=0;j<n;j++)
{
if(!vis[j]&&d[j]<tmp)
{
p=j;
tmp=d[j];
}
}
ans+=tmp;
vis[p]=1;
for(int j=0;j<n;j++)
{
if(!vis[j]&&e[j][p]<d[j])
d[j]=e[j][p];
}
}
return ans;
} int main()
{
int i,j;
double le,ri,mid;
while(scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
scanf("%lf%lf%lf",&x[i],&y[i],&z[i]);
for(i=0;i<n;i++)
for(j=0;j<i;j++)
{
mp[i][j]=mp[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
c[i][j]=c[j][i]=z[i]>z[j]?z[i]-z[j]:z[j]-z[i];
}
le=0;ri=1001;//不开心。。这样才干水过
while(ri-le>1e-5)
{
mid=(le+ri)/2.0;
// printf("prim:%lf\n",prim(0,mid));
if(prim(mid)>0)
le=mid;
else ri=mid;
}
printf("%.3f\n",mid);
}
return 0;
}

poj2728 Desert King --- 01分数规划 二分水果。。的更多相关文章

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

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

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

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

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

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

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

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

  5. POJ 2728 Desert King 01分数规划,最优比率生成树

    一个完全图,每两个点之间的cost是海拔差距的绝对值,长度是平面欧式距离, 让你找到一棵生成树,使得树边的的cost的和/距离的和,比例最小 然后就是最优比例生成树,也就是01规划裸题 看这一发:ht ...

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

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

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

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

  8. POJ2728 最小比率生成树/0-1分数规划/二分/迭代(迭代不会)

    用01分数规划 + prime + 二分 竟然2950MS惊险的过了QAQ 前提是在TLE了好几次下过的 = = 题目意思:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一 ...

  9. POJ - 3111 K Best 0-1分数规划 二分

    K Best Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 12812   Accepted: 3290 Case Time ...

随机推荐

  1. Python作业day2购物车

    流程图: 实现情况: 可自主注册, 登陆系统可购物,充值(暂未实现),查询余额. 撸了两天一夜的代码,不多说,直接上码,注释神马的后面再说 #!/usr/bin/env python # -*- co ...

  2. jQuery学习-事件之绑定事件(一)

    我们都知道jQuery的事件其思想来源于Dean Edwards的addEvent,通过源码我们知道jQuery在为元素绑定事件时,每种类型的事件(click,blur)时只绑定了一次对应类型的事件处 ...

  3. DirectUI实现原理

    一,概念 传统的Windows窗口程序对每一个控件都会创建一个句柄,而DUI技术奖所有控件都绘制在一个窗体上,这些控件的逻辑和绘图方式必须自己进行编写和封装,所以这些控件都是无句柄的. DUI技术的实 ...

  4. coroutine

    在脚本语言中,coroutine 不是个新鲜词汇,比如 lua 内建 coroutine,python中的greenlet,但在C程序中,并不是太常见. windows 下有 fiber,相关函数为 ...

  5. 本地/远程Service 和Activity 的交方式(转)

    android SDK提供了Service,用于类似*nix守护进程或者windows的服务. Service有两种类型: 本地服务(Local Service):用于应用程序内部 远程服务(Remo ...

  6. Android 给Button加个监听

    1.日期设置控件:DatePickerDialog 2.时间设置控件:TimePickerDialog 实例代码 1.页面添加两个Button,单击分别显示日期设置控件和时间设置控件,还是有TextV ...

  7. getline(cin,s) bug workaround

    #include<iostream>using namespace std;#include<string> int main(){int n;stirng s;cin> ...

  8. VS2015 开发人员命令提示,如何实现记事本编程

    开始,选择VS2015 开发人员命令提示,打开 找到.c文件的位置,复制位置 在VS2015 开发人员命令提示, 输入cd 位置 回车 然后输入cl 文件名 回车 这样进行编译

  9. Android开发8:UI组件TextView,EditText,Button

    版本:Android4.3 API18 学习整理:liuxinming TextView 概述 TextView直接继承了View(EditText.Button两个UI组件类的父类) TextVie ...

  10. sql中在查询语句中加判断,控制输出的内容

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...