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

题意:给你n的点,每一个点会有一个坐标(x,y),然后还有一个z值,现在上你求一棵生成树,是的这棵生成树的所有边的费用/所有边的距离最小,其中,边费用是指两点之z差值的绝对值,边距离是指两点之间的距离。

题解:这一题就是求最小比率生成树。采用的解法就是0-1分数规划。

其中设最后的比率是l

1,z(l)是单调递减的。

2,z(max(l))=0;这可以采用反证法进行证明。

3,因为是完全图,所以要采用prime求最小生成树。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=;
const double inf=10000000000.0;
double mp[N][N],cost[N][N];
double dist[N];
double xx[N],yy[N],zz[N];
int n;
bool vis[N];
bool solve(double x){
for(int i=;i<=n;i++){
vis[i]=;
dist[i]=cost[i][]-mp[i][]*x;
}
vis[]=;
dist[]=;
double cost2=;
for(int i=;i<n;i++){
double minn=inf;
int k=-;
for(int j=;j<=n;j++){
if(!vis[j]&&dist[j]<minn){
minn=dist[j];
k=j;
}
}
if(k!=-){
cost2+=dist[k];
vis[k]=;
for(int j=;j<=n;j++){
if(!vis[j]){
double tt=cost[k][j]-mp[k][j]*x;
if(dist[j]>tt){
dist[j]=tt;
}
}
}
}
}
if(cost2>=)return true;
return false; }
int main(){
while(~scanf("%d",&n)&&n){
for(int i=;i<=n;i++){
scanf("%lf%lf%lf",&xx[i],&yy[i],&zz[i]);
}
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
double temp=(xx[i]-xx[j])*(xx[i]-xx[j])+(yy[i]-yy[j])*(yy[i]-yy[j]);
mp[i][j]=mp[j][i]=sqrt(temp);
cost[i][j]=cost[j][i]=abs(zz[i]-zz[j]);
}
}
double l=,r=,ans=;
while(abs(r-l)>1e-){
double mid=(r+l)/;
if(solve(mid)){
l=mid;
ans=mid;
}
else
r=mid;
}
printf("%.3f\n",ans);
}
}

Desert King的更多相关文章

  1. 【poj2728】Desert King

    [poj2728]Desert King 题意 最优比率生成树. http://blog.csdn.net/ophunter_lcm/article/details/10113817 分析 Dinke ...

  2. poj 2728 Desert King (最小比例生成树)

    http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissio ...

  3. Desert King(最优比率生成树)

    Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 22717   Accepted: 6374 Desc ...

  4. POJ 2728 Desert King 最优比率生成树

    Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 20978   Accepted: 5898 [Des ...

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

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

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

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

  7. poj 2728 Desert King (最优比率生成树)

    Desert King http://poj.org/problem?id=2728 Time Limit: 3000MS   Memory Limit: 65536K       Descripti ...

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

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

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

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

  10. POJ 2728 Desert King(最优比例生成树 二分 | Dinkelbach迭代法)

    Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 25310   Accepted: 7022 Desc ...

随机推荐

  1. Android_Broadcast

    /** * Broadcast(广播):是一种广泛运用的在应用程序之间传输信息的机制 * * BroadcastReceiver(广播接收者) * 是对发送出来的广播进行过滤接收并响应的一类组件,它就 ...

  2. [置顶] html学习笔记,锚点,超链接,table布局,表头,h,sub,blockquote,ul,li,ol.dl,加入收藏,打印,弹出窗口

    <a name="shouye"></a> <strong>strong加粗</strong> <br> 没有加粗 &l ...

  3. SQL Server自动化运维系列 - 多服务器数据收集和性能监控

    需求描述 在生产环境中,很多情况下需要采集数据,用以定位问题或者形成基线. 关于SQL Server中的数据采集有着很多种的解决思路,可以采用Trace.Profile.SQLdiag.扩展事件等诸多 ...

  4. Extjs事件继承注意事项

    Extjs事件继承总结: 在基类中只需配置通用事件,无需配置通用界面,通用界面无效,通用事件一直有效 基表格控制器

  5. Ext.Net学习笔记11:Ext.Net GridPanel的用法

    Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...

  6. Runtime 在IOS中的详细使用

    因为之前写东西的时候,都在未知笔记中,所有大家没有看到过我的文章,今天就开始使用博客园来进行和大家沟通.好了,废话不那么多了,转入正题.下面我把runtime 给大家介绍一下. ### 一.runti ...

  7. scrapy shell 中文网站输出报错.记录.

    UnicodeDecodeError: 'gbk' codec can't decode bytes in position 381-382: illegal multibyte sequence 上 ...

  8. uglifyjs 压缩js

    第一步 安装nodejs dos下执行 node -v npm -v

  9. ubuntu desktop 开机 连接网络

    参考   http://linux.net527.cn/Ubuntu/Ubuntuanzhuangyuyingyong/2490.html

  10. sar监控系统状态

    sar 命令很强大,它可以监控系统所有资源状态,比如平均负载.网卡流量.磁盘状态.内存使用等等. 它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态 ...