最优比率生成树 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)个农场之前,首先必须把所有农场用道路连接 ...
随机推荐
- Codeforces 861D - Polycarp's phone book
861D - Polycarp's phone book 思路:用map做的话,只能出现一次循环,否则会超时. 代码: #include<bits/stdc++.h> using name ...
- 原生 js 时钟实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- android-------高德地图两点路线和多个点路线绘制
最近朋友需要两点路线和多个点路线绘制这个功能,帮忙弄了一下,写这篇博客与大家分享一下. 两点路线 是起点和终点两个经纬度点,高德绘制出路线,可以实现实线和虚线功能 效果图: 相关属性: mPol ...
- ubuntu谷歌浏览器安装
sudo apt-get install chromium-browser-dbg 然后按照规定就好了.
- Oracle11g温习-第六章:控制文件
2013年4月27日 星期六 10:33 .控制文件的功能和特点 1) [定义数据库当前物理状态] 2) [维护数据的一致性] 如果控制文件中的检查点与数据文件中的一致,则说明数据一致,可以启动到 ...
- 关于vue Unexpected identifier 问题
vue对于es6虽然自带babel转换 但是在index.html文件中并不会发生转换 因此在index.html中使用新的语法会导致低版本浏览器不识别代码因此报出Unexpected identif ...
- Application 类
Application 类具有用于启动和停止应用程序和线程以及处理 Windows 消息的方法,如下所示: Run 在当前线程上启动应用程序消息循环,并可以选择使某窗体可见. Exit 或 ExitT ...
- MySql和Sql的单行注释和多行注释的区别
这里,请允许我把mysqlserver和sqlserver注释一起说明 1.单行注释 1)mysql中,可以用“-- ”和“ --”来注释 -- 方式1:单行注释 -- create database ...
- MySql Server 5.7的下载及安装详细步骤
1.下载安装包 1)找到官网下载地址(https://dev.mysql.com),选择downloads,找到windows
- python 加密 解密 签名 验证签名 公钥 私钥 非对称加密 RSA
加密与解密,这很重要,我们已经可以用pypcap+npcap简单嗅探到网络中的数据包了.而这个工具其实可以嗅探到更多的数据.如果我们和别人之间传输的数据被别人嗅探到,那么信息泄漏,信息被篡改,将给我们 ...