POJ2728:Desert King——题解
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——题解的更多相关文章
- POJ2728 Desert King 【最优比率生成树】
POJ2728 Desert King Description David the Great has just become the king of a desert country. To win ...
- POJ2728 Desert King —— 最优比率生成树 二分法
题目链接:http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS Memory Limit: 65536K Total Subm ...
- poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】
含[最小生成树Prim]模板. Prim复杂度为$O(n^2),适用于稠密图,特别是完全图的最小生成树的求解. Desert King Time Limit: 3000MS Memory Li ...
- [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(最小生成树+01分数规划=最优比率生成树)
题意 n个点完全图,每个边有两个权值,求分数规划要求的东西的最小值. (n<=1000) 题解 心态炸了. 堆优化primT了. 普通的就过了. 我再也不写prim了!!!! 咳咳 最优比率生成 ...
- poj2728 Desert King --- 01分数规划 二分水果。。
这题数据量较大.普通的求MST是会超时的. d[i]=cost[i]-ans*dis[0][i] 据此二分. 但此题用Dinkelbach迭代更好 #include<cstdio> #in ...
- 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://blog.csdn.net/sdj222555/article/details/7490797 个人觉得很明白易懂,但他写的代码略囧. 模板题,但是必须Prim,不能 ...
随机推荐
- MySQL高级-慢查询日志
一.慢查询日志是什么 1. 2. 3. 2.开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢? 3.案例 1.查看当前多少秒算慢 2.设置慢的阙值时间 3.为什么设置后看不出变化? 4.记 ...
- Docker - 常用命令集
启动容器 docker run -d -p 58080:8080 -p 58000:8000 --name mytomcat1.0 -v /root/webapps/:/opt/apache-tomc ...
- leetcode-第k个排列(Java和c++版)
第k个排列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" " ...
- Git版本库工作流程图想
对照廖雪峰的教程,发现有很多难以理解的地方,画了一个图想方便以后参考 首先两个基本命令反应了版本库最本质的工作流程,后面的命令其实都基于此git add 把文件修改添加到暂存区git commit 在 ...
- lr 常用操作
lr脚本编写语法: web_add_cookie();:服务器注入cookies lr_save_string("网址或其他","参数2");:一个保存函数,它 ...
- 今日头条 2018 AI Camp 6 月 2 日在线笔试编程题第一道——最大连续区间和扩展
题目 给出一个长度为 n 的数组a1.a2.....ana1.a2.....an,请找出在所有连续区间 中,区间和最大同时这个区间 0 的个数小于等于 3 个,输出这个区间和. 输入描述: 第一行一个 ...
- 零基础自学人工智能,看这些资料就够了(300G资料免费送)
为什么有今天这篇? 首先,标题不要太相信,哈哈哈. 本公众号之前已经就人工智能学习的路径.学习方法.经典学习视频等做过完整说明.但是鉴于每个人的基础不同,可能需要额外的学习资料进行辅助.特此,向大家免 ...
- MyBatis 插件 : 打印 SQL 及其执行时间
Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用: Executor(update. ...
- [leetcode-744-Find Smallest Letter Greater Than Target]
Given a list of sorted characters letters containing only lowercase letters, and given a target lett ...
- POJ 2653 Pick-up sticks(线段判交)
Description Stan has n sticks of various length. He throws them one at a time on the floor in a rand ...