【POJ2728】Desert King(分数规划)
【POJ2728】Desert King(分数规划)
题面
vjudge
翻译:
有\(n\)个点,每个点有一个坐标和高度
两点之间的费用是高度之差的绝对值
两点之间的距离就是欧几里得距离
求一棵生成数,使得单位距离的费用最小
题解
使得\(\sum cost/\sum dis\)最小
这是分数规划问题
二分答案\(K\)
如果\(K\)满足,则有
\(\sum cost-K\sum dis\leq 0\)
定义生成树边权为\(cost-K·dis\)
做最小生成树检查答案即可。
因为是稠密图,使用\(Prim\)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define sqr(x) (1.0*(x)*(x))
#define RG register
#define MAX 1111
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,x[MAX],y[MAX],z[MAX];
double dis[MAX];
double len[MAX][MAX],cost[MAX][MAX],g[MAX][MAX];
bool vis[MAX];
bool check(double mid)
{
for(int i=0;i<=n;++i)dis[i]=1e20,vis[i]=false;
dis[1]=0;double tot=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
g[i][j]=cost[i][j]-mid*len[i][j];
for(int i=1;i<=n;++i)
{
int u=0;
for(int j=1;j<=n;++j)if(!vis[j]&&dis[j]<dis[u])u=j;
vis[u]=true;tot+=dis[u];
for(int j=1;j<=n;++j)
if(!vis[j])
dis[j]=min(dis[j],g[u][j]);
}
return tot<=0;
}
int main()
{
while(n=read())
{
for(int i=1;i<=n;++i)x[i]=read(),y[i]=read(),z[i]=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
len[i][j]=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j])),cost[i][j]=abs(z[i]-z[j]);
double l=0,r=1e5;
while(r-l>=1e-5)
{
double mid=(l+r)/2;
if(check(mid))r=mid;
else l=mid;
}
printf("%.3f\n",l);
}
return 0;
}
【POJ2728】Desert King(分数规划)的更多相关文章
- POJ2728 Desert King 【最优比率生成树】
POJ2728 Desert King Description David the Great has just become the king of a desert country. To win ...
- poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】
含[最小生成树Prim]模板. Prim复杂度为$O(n^2),适用于稠密图,特别是完全图的最小生成树的求解. Desert King Time Limit: 3000MS Memory Li ...
- poj2728 Desert King——01分数规划
题目:http://poj.org/problem?id=2728 第一道01分数规划题!(其实也蛮简单的) 这题也可以用迭代做(但是不会),这里用了二分: 由于比较裸,不作过多说明了. 代码如下: ...
- poj2728 Desert King(最小生成树+01分数规划=最优比率生成树)
题意 n个点完全图,每个边有两个权值,求分数规划要求的东西的最小值. (n<=1000) 题解 心态炸了. 堆优化primT了. 普通的就过了. 我再也不写prim了!!!! 咳咳 最优比率生成 ...
- POJ2728 Desert King (最小生成树、0/1分数规划)
显然的0/1分数规划问题,用二分来解决,检验mid,就用prim算法求最小生成树,看总边权是否大等于0即可验证. 1 #include<bits/stdc++.h> 2 using nam ...
- [POJ2728] Desert King 解题报告(最优比率生成树)
题目描述: David the Great has just become the king of a desert country. To win the respect of his people ...
- POJ2728 Desert King
一道生成树+\(0/1\)分数规划 原题链接 设每条边的距离为\(dis[x]\),两点高度差为\(h[x]\),该图的生成树为\(T\),则题目实际求的就是\(\dfrac{\sum\limits_ ...
- POJ2728 Desert King 最优比率生成树
题目 http://poj.org/problem?id=2728 关键词:0/1分数规划,参数搜索,二分法,dinkelbach 参考资料:http://hi.baidu.com/zzningxp/ ...
- POJ2728 Desert King —— 最优比率生成树 二分法
题目链接:http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS Memory Limit: 65536K Total Subm ...
- poj2728 Desert King --- 01分数规划 二分水果。。
这题数据量较大.普通的求MST是会超时的. d[i]=cost[i]-ans*dis[0][i] 据此二分. 但此题用Dinkelbach迭代更好 #include<cstdio> #in ...
随机推荐
- 我错了的N个学习
其实在面对自己的失误的时候,勇敢的说我错了,就是我错了,不找借口,不找理由,然后就开始分析错误的原因,分析,总结,学习,提高,成为自己成长的垫脚石,这个才是正确的做法,做人要拿出精神头,拼死至休的劲头 ...
- SpringBoot入门(四)——自动配置
本文来自网易云社区 SpringBoot之所以能够快速构建项目,得益于它的2个新特性,一个是起步依赖前面已经介绍过,另外一个则是自动配置.起步依赖用于降低项目依赖的复杂度,自动配置负责减少人工配置的工 ...
- Elastic stack ——X-Pack安装
X-Pack是一个Elastic Stack的扩展,将安全,警报,监视,报告和图形功能包含在一个易于安装的软件包中.在Elasticsearch 5.0.0之前,您必须安装单独的Shield,Watc ...
- 三年同行,质造未来,腾讯WeTest五大服务免费体验
WeTest 导读 2018年10月26日,腾讯WeTest将正式迎来三周岁生日.三周年庆典期间,只要在WeTest平台注册的用户,均可免费体验标准兼容.云真机.压测大师.手游安全扫描.应用安全扫描等 ...
- 纯净CentOS安装PHP网站环境
一.MySQL数据库 安装mysql: yum install mysql mysql-server 启动mysql: /etc/init.d/mysqld start 或 service mysq ...
- hdu1061Rightmost Digit(快速幂取余)
Rightmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- Linux命令应用大词典-第35章 终端
35.1 tty:显示当前连接到当前标准输入的终端设备文件名 35.2 consoletype:显示连接到标准输入的控制台类型 35.3 fgconsole:显示活动的虚拟终端数量 35.4 ming ...
- hello-jni Android.mk文件简析
#删除旧变量 LOCAL_PATH := $(call my-dir) #返回当前目录 include $(CLEAR_VARS) #删除旧变量 #设置新变量 LOCAL_MODULE := hell ...
- 一个五位数ABCDE乘以9,得到EDCBA,求此五位数
此题是面试时某面试官突然抛出的,要求逻辑分析推导,不许编码,5分钟时间算出来最终结果,当然,最终没有完全推算出来 下面是编码实现 #一个五位数ABCDE*9=EDCBA,求此数 for a in ra ...
- RNN概述-深度学习 -神经网络
一 RNN概述 前面我们叙述了BP算法, CNN算法, 那么为什么还会有RNN呢?? 什么是RNN, 它到底有什么不同之处? RNN的主要应用领域有哪些呢?这些都是要讨论的问题. 1) BP算法 ...