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. 关于iOS开发的各种证书

    关于iOS开发的各种证书 最近在接推送服务的时候,被各种证书弄得不亦晕乎,这里记录一下一些基本的证书作用: 1. App IDs appID分明确的和通配的两种,如果要使用推送功能,只能用明确的. 2 ...

  2. elasticsearch增删改查操作

    目录 1. 插入数据 2. 更改数据 3. 删除数据 4. 检索文档 1. 插入数据 关于下面的代码如何使用,可以借助于kibana的console,浏览器打开地址: http://xxx.xxx.x ...

  3. Tomcat - 远程调试配置

    复制一份startup.bat,更名为“startup-debug”. 替换内容如下: call "%EXECUTABLE%" start %CMD_LINE_ARGS% 替换为 ...

  4. 「日常训练」COMMON 约数研究(HYSBZ-1968)

    题意与分析 感谢https://www.cnblogs.com/Leohh/p/7512960.html的题解.这题话说原来不在我的训练范围,正好有个同学问我,我就拿来做做.数学果然不是我擅长的啊,这 ...

  5. APP上下左右滑动屏幕的处理

    #获得机器屏幕大小x,y driver = self.driver def getSize(): x = driver.get_window_size()['width'] y = driver.ge ...

  6. Selenium(Python)驱动Chrome浏览器

    Chrome浏览器与chromedriver.exe驱动可以是官网上最新的, 随意! Chrome.py: from selenium import webdriverfrom selenium.we ...

  7. Linux命令应用大词典-第28章 硬件管理

    28.1 lscpu:显示有关CPU架构的信息 28.2 nproc:显示当前进程可用的CPU数目 28.3 chcpu:配置CPU

  8. TW实习日记:第14天

    今天可以说是又忙又不忙了,忙是因为要赶bug,似乎总有种隐形的力量催着你交工,但实际上太多涉及后端接口的问题,所以又要等别人修改接口才能改bug,可以说真是十分蛋疼了. 改bug的最大心得就是:写好注 ...

  9. centos 6.5 启动时卡在进度条位置无法进入系统解决办法。

    今天公司服务器因突然断电导致phddns 花生壳 启动失败,一直卡在启动进度条页面. 解决办法 1.按F5查看卡在什么位置, 2.查看解决方法:程序卡住的情况下,直接备份资料后,卸载程序重启就可以了. ...

  10. 【Python 开发】第一篇:计算机基础

    一.计算机基础 首先Python是一门编程语言 语言: 那什么是语言? 语言就是一种事物与另一种事物沟通的介质.所以说编程语言是程序员跟计算机沟通的介质. 什么是编程: 准确来说就是程序员用计算机所能 ...