http://poj.org/problem?id=2728

题目大意:求一棵生成树使得路费用和/路长之和最小(路的费用是两端点的高度差)

最小比率生成树。

我们还是01分数规划的思想将边权变为路费用-路长*枚举的答案,跑一遍最小生成树即可。

但是debug的三个小时的我要对出题人说一句。

CNM无良卡常!K算法被卡正常,堆优化Prim都被卡你是什么东西????!!!

#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#include<cctype>
#include<algorithm>
using namespace std;
typedef double dl;
const int N=;
const dl INF=0x7fffffff;
struct node{
dl w,h;
}e[N][N];
dl dis[N],x[N],y[N],z[N];
int n;
bool vis[N];
inline dl getdis(int i,int j){
dl X=x[i]-x[j],Y=y[i]-y[j];
return sqrt(X*X+Y*Y);
}
dl prim(dl mid){
for(int i=;i<=n;i++)dis[i]=INF,vis[i]=;
dl ans=;int u=;
dis[u]=;vis[u]=;
for(int i=;i<n;i++){
int v;dl minn=INF;
for(int j=;j<=n;j++){
if(vis[j])continue;
dl w=e[u][j].h-mid*e[u][j].w;
if(dis[j]>w)dis[j]=w;
if(minn>dis[j]){
minn=dis[j];
v=j;
}
}
vis[v]=;ans+=minn;u=v;
}
return ans;
}
int main(){
while(scanf("%d",&n)!=EOF&&n){
dl l=,r=;
for(int i=;i<=n;i++){
scanf("%lf%lf%lf",&x[i],&y[i],&z[i]);
for(int j=;j<i;j++){
e[i][j].w=e[j][i].w=getdis(i,j);
e[i][j].h=e[j][i].h=fabs(z[i]-z[j]);
}
}
for(int i=;i<=;i++){
dl mid=(l+r)/;
if(prim(mid)>=)l=mid;
else r=mid;
}
printf("%.3f\n",r);
}
return ;
}

POJ2728:Desert King——题解的更多相关文章

  1. POJ2728 Desert King 【最优比率生成树】

    POJ2728 Desert King Description David the Great has just become the king of a desert country. To win ...

  2. POJ2728 Desert King —— 最优比率生成树 二分法

    题目链接:http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Subm ...

  3. poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】

    含[最小生成树Prim]模板. Prim复杂度为$O(n^2),适用于稠密图,特别是完全图的最小生成树的求解.   Desert King Time Limit: 3000MS   Memory Li ...

  4. [POJ2728] Desert King 解题报告(最优比率生成树)

    题目描述: David the Great has just become the king of a desert country. To win the respect of his people ...

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

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

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

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

  7. POJ2728 Desert King

    一道生成树+\(0/1\)分数规划 原题链接 设每条边的距离为\(dis[x]\),两点高度差为\(h[x]\),该图的生成树为\(T\),则题目实际求的就是\(\dfrac{\sum\limits_ ...

  8. POJ2728 Desert King 最优比率生成树

    题目 http://poj.org/problem?id=2728 关键词:0/1分数规划,参数搜索,二分法,dinkelbach 参考资料:http://hi.baidu.com/zzningxp/ ...

  9. 【最优比率生成树】poj2728 Desert King

    最优比率生成树教程见http://blog.csdn.net/sdj222555/article/details/7490797 个人觉得很明白易懂,但他写的代码略囧. 模板题,但是必须Prim,不能 ...

随机推荐

  1. Unbuntu安装RVM

    apt-get install curl #安装rvm curl -L https://get.rvm.io | bash #执行启动 source /home/mafei/.rvm/scripts/ ...

  2. android学习十一 高级调试分析功能

    1.debug 功能列表 2.ddms功能( 内存检查,线程检查,视图层次分析) 3.跟踪代码 TraceView 4.命令行工具 adb 5.策略检查StrictMode

  3. 获取Chromium代码以及编译

    获取和编译Chromium必须自备梯子,最好是购买一个稳定的V*P*N,喜欢折腾的可以使用类似shadowsock的代理(需要设置google文档). 英文版教程文档可以参考这个界面,下面详细说Win ...

  4. Python汉诺塔问题递归算法与程序

    汉诺塔问题: 问题来源:汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘.上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱 ...

  5. 【JSON类】使用说明

    理解键名路径 键名路径(keyPath)用于定位json的键,比如:{book: {title:”中国人”} },键名路径 book.title 表定位到book下的title键. 对于值是数组类型的 ...

  6. 【cookie接口】- jmeter - (请求提示no cookie)

    1.虽然 请求成功 响应码 200  ,但是  返回code 1  ,表示接口不成功 2.加入 空的cookie 管理器就可以了  返回 code 0 注意:状态码 200 只是表示请求是成功的 , ...

  7. 【Linux 运维】linux系统修改主机名

    主机名的修改:  1.命名解释: [root@localhost~]# 分别代表: 用户名(root) 主机名(localhost) 当前路径(~,当前用户的home目录) 权限标志位(#代表root ...

  8. anaconda安装scrapy报错解决办法

    今天在用anaconda安装scrapy的时候遇见个坑,现在将解决办法发出来,供大家参考使用: 问题描述: anaconda安装scrapy,使用 conda install scrapy 命令.安装 ...

  9. eos教程如何创建eos测试账号并且使用scatter插件

    EOS代币租赁平台 --- Chintai平台已经在Jungle测试网络上部署了,欢迎大家来体验. 地址见: Chintai 公测版 官网是: Chintai 目前测试网络上面需要用到Scatter插 ...

  10. 《剑指offer》---顺时针打印矩阵

    本文算法使用python3实现 1. 问题1 1.1 题目描述:   输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 ...