最优比率生成树 POJ 2728 迭代或者二分
别人解题报告的链接:
http://blog.sina.com.cn/s/blog_691190870101626q.html
说明一下关于精度的问题,当结果是精确到小数点后3为,你自然要把误差定为至少10^(-4),我定的是10^(-8)````这里多定点没事的···
然后对于POJ上的提交,如果是用C++提交,可以写printf("%.3lf\n",ans);
但是如果是用的G++提交,就得用printf("%.3f\n",ans);
当然ans定义的是double型的·····
补充的解题报告链接:
http://blog.csdn.net/sdj222555/article/details/7490797
//#define debug
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
#define N 1005
#define eps 1e-8
#define INF 1e300
struct point
{
int x,y,z;
} p[N];
double dis(point a,point b)
{
double t = (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
return sqrt(t);
}
struct arc
{
double len,cost;
} edge[N][N];
double lowcost[N];
int pre[N];
bool vis[N];
int n;
double prim(double d)
{
double tl =,tc=,ra;
memset(vis,,sizeof(vis));
vis[] = ;
for(int i=; i<n; ++i)
{
lowcost[i] = edge[][i].cost-d*edge[][i].len;
pre[i] = ;
}
for(int k=; k<n; ++k)
{
double mi = INF;
int v;
for(int i=; i<n; ++i)
{
if(!vis[i] && lowcost[i] < mi)
{
mi = lowcost[i];
v = i;
}
}
vis[v] = ;
tc += edge[v][pre[v]].cost;
tl += edge[v][pre[v]].len;
for(int i=; i<n; ++i)
{
if(!vis[i] && lowcost[i] > edge[v][i].cost-d*edge[v][i].len)
{
lowcost[i] = edge[v][i].cost-d*edge[v][i].len;
pre[i] = v;
}
}
}
ra = tc/tl;
return ra;
}
int main()
{
#ifdef debug
freopen("in.c","r",stdin);
#endif
while(scanf("%d",&n),n)
{
for(int i=; i<n; ++i)
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
for(int i=; i<n; ++i)
{
for(int j=i+; j<n; ++j)
{
edge[i][j].len = edge[j][i].len = dis(p[i],p[j]);
edge[i][j].cost = edge[j][i].cost = fabs(p[i].z-p[j].z);
}
}
double r=;
while(true)
{
double t = prim(r);
if(fabs(t-r) < eps) break;
r = t;
}
printf("%.3f\n",r);
}
return ;
}
最优比率生成树 POJ 2728 迭代或者二分的更多相关文章
- POJ.2728.Desert King(最优比率生成树 Prim 01分数规划 二分/Dinkelbach迭代)
题目链接 \(Description\) 将n个村庄连成一棵树,村之间的距离为两村的欧几里得距离,村之间的花费为海拔z的差,求花费和与长度和的最小比值 \(Solution\) 二分,假设mid为可行 ...
- POJ 2728 Desert King(最优比率生成树 01分数规划)
http://poj.org/problem?id=2728 题意: 在这么一个图中求一棵生成树,这棵树的单位长度的花费最小是多少? 思路: 最优比率生成树,也就是01分数规划,二分答案即可,题目很简 ...
- poj 2728 Desert King (最优比率生成树)
Desert King http://poj.org/problem?id=2728 Time Limit: 3000MS Memory Limit: 65536K Descripti ...
- POJ 2728 Desert King ★(01分数规划介绍 && 应用の最优比率生成树)
[题意]每条路径有一个 cost 和 dist,求图中 sigma(cost) / sigma(dist) 最小的生成树. 标准的最优比率生成树,楼教主当年开场随手1YES然后把别人带错方向的题Orz ...
- POJ 2728 Desert King 最优比率生成树
Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20978 Accepted: 5898 [Des ...
- [转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环
01分数规划 前置技能 二分思想最短路算法一些数学脑细胞? 问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此 ...
- [POJ2728] Desert King 解题报告(最优比率生成树)
题目描述: David the Great has just become the king of a desert country. To win the respect of his people ...
- [USACO]地震 (二分答案+最优比率生成树详解)
题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...
- 2018.09.12 earthquake(最优比率生成树)
描述 地震已经破坏了农夫约翰所有的农场以及所有连接农场的道路.作为一个意志坚强的人,他决定重建所有的农场.在重建全部N(1 <= N <= 400)个农场之前,首先必须把所有农场用道路连接 ...
随机推荐
- JavaScript权威指南--脚本化HTTP
知识要点 超文本传输协议(HTTP)规定web浏览器如何从web服务器获取文档和向web服务器发送表单内容,以及web服务器如何响应这些请求和提交.web浏览器会处理大量的HTTP.通常,HTTP并不 ...
- ASCII 可打印字符与控制字符
2017-08-16 21:29:30 基本的 ASCII 字符集共有 128 个字符,其中有 95 个可打印字符,包括常用的字母.数字.标点符号等,另外还有 33 个控制字符.标准 ASCII 码使 ...
- mysql 将一张表里的数据插入到另一张表
1. 表结构一样 insert into 表1 select * from 表2 2. 表结构不一样 insert into 表1 (列名1,列名2,列名3) select 列1,列2,列3 from ...
- String字符串存入数据库中超出最大长度(oracle varchar2 4000)?应合理分条存储(java实现-工具/方法)
问题描述 需要向数据库中保存数据,但某个字段内容长度过长(有中文.符号.英文),应该根据字符串内容与数据库存储上限合理设置储存方式. 解决思路 分条存储,即多条数据前n个字段一致,最后内容字段不同,下 ...
- English trip -- Review Unit5 Around town 在城市
restaurant 餐厅 supermarket 超市 shoping mall 购物中心 drugstore 药店 hospital 医院 laundromat 洗衣店 moive threat ...
- English trip -- VC(情景课) 8 B job duties 工作职责
Vocabulary focus 核心词汇 She is a receptionist. She answers the phone. She is a cashier She counts mon ...
- English trip -- VC(情景课)1 B Countries
Vocabulary focus 核心词汇 Vo ca bu la ry fo cus [və(ʊ)'kæbjʊlərɪ] ['fəʊkəs] Listen and repeat 听并 ...
- hdu3374 kmp+最小表示法
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- python-day33--Process类中的方法及属性
p.daemon = True -->守护进程,守护进程不可以再有子进程,并且主进程死守护进程就死,要写在p.start()之前 p.join() ---> 主进程等子进程执行完 之后再结 ...
- thinkphp查询缓存
S()函数的使用: ThinkPHP把各种缓存方式都抽象成统一的缓存类来调用,而且ThinkPHP把所有的缓存机制统一成一个S方法来进行操作,所以在使用 不同的缓存方式的时候并不需要关注具体的缓存 ...