这题数据量较大。普通的求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---连接MySQL第五页

    Connector/Python Connection Arguments A connection with the MySQL server can be established using ei ...

  2. shell提示符显示git当前分支

    编辑/etc/profile或者~/.bashrc 在行末添加如下内容 # 获取git当前分支 git_branch() { branch='' cd $PWD if [ -d '.git' ]; t ...

  3. webservice axis2客户端设置代理方法(公司网络通过代理访问时)

    webservice axis2客户端设置代理方法(公司网络通过代理访问时)   UploadProcessInServiceStub stub = new UploadProcessInServic ...

  4. php快递查询

    http://www.oschina.net/code/snippet_60100_25087 <?php class Express { private $expressname =array ...

  5. 当PullToRefreshScrollView里面嵌套ListView

    当PullToRefreshScrollView里面嵌套ListView,ListView上面还是有内容的,当下拉刷新的 时候,数据填充完成之后ListView就会往上面滑动,导致ListView上面 ...

  6. js生成随机数的方法实例总结 [收藏]

    js生成随机数的方法实例总结 js生成随机数主要用到了内置的Math对象的random()方法.用法如:Math.random().它返回的是一个 0 ~ 1 之间的随机数.有了这么一个方法,那生成任 ...

  7. 自学SQL语言的例子(使用MySQL实现)

    SQL语言作为一种数据库管理的标准语言有着极为广泛的应用场景,菜鸟入门选用的数据库软件是轻量级的免费(这个极为重要)的MySQL,下载链接如下:http://www.mysql.com/downloa ...

  8. 后台程序控制js弹出框

    public void jsWindow(String msg, int i){ HttpServletResponse response=ServletActionContext.getRespon ...

  9. provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接

    问题描述: SQL Sever2012 中:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为 ...

  10. Git操作流水账

    一.关于Git Git是一个分布式版本控制/软件配置管理软件,原是Linux内核开发者林纳斯·托瓦兹(Linus Torvalds)为更好地管理Linux内核开发而设计. 二.Git的环境配置 2.1 ...