poj 2728 最优比率生成树
思路:设sum(cost[i])/sum(dis[i])=r;那么要使r最小,也就是minsum(cost[i]-r*dis[i]);那么就以cost[i]-r*dis[i]为边权重新建边。当求和使得最小生成树的
sum(cost[i]-r*dis[i])==0时,这个r就是最优的。这个证明是01分数规划。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define Maxn 1010
#define Maxm Maxn*Maxn
#define inf 1e16
#define eps 1e-6
using namespace std;
int vi[Maxn],n;
double dis[Maxn][Maxn],cost[Maxn][Maxn],benefit[Maxn][Maxn],far[Maxn];
struct Point{
double x,y,z;
}p[Maxn];
void init()
{
memset(dis,,sizeof(dis));
memset(vi,,sizeof(vi));
memset(cost,,sizeof(cost));
memset(far,,sizeof(far));
}
double Dis(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double prime(double r)
{
int i,j,temp;
double ans,Max;
memset(vi,,sizeof(vi));
ans=;
for(i=;i<=n;i++)
far[i]=inf;
far[]=;
for(i=;i<=n;i++)
{
Max=inf;
for(j=;j<=n;j++)
{
if(!vi[j]&&far[j]<Max)
{
Max=far[j];
temp=j;
}
}
vi[temp]=;
ans+=Max;
// dis[temp][j]-cost[temp][j]
for(j=;j<=n;j++)
{
if(!vi[j]&&far[j]>cost[temp][j]-r*dis[temp][j])
far[j]=cost[temp][j]-r*dis[temp][j];
}
}
return ans;
}
int main()
{
int i,j,a,b,c;
double Max;
while(scanf("%d",&n)!=EOF,n)
{
init();
Max=-inf;
for(i=;i<=n;i++)
{
scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].z);
}
for(i=;i<n;i++)
{
for(j=i+;j<=n;j++)
{
dis[j][i]=dis[i][j]=Dis(p[i],p[j]);
Max=max(dis[i][j],Max);
cost[i][j]=cost[j][i]=fabs(p[i].z-p[j].z);
}
}
double l,r,mid;
l=,r=;
double temp;
while(r-l>eps)
{
mid=(l+r)/;
temp=prime(mid);
if(temp>)
l=mid;
else
r=mid;
}
printf("%.3lf\n",l);
}
return ;
}
poj 2728 最优比率生成树的更多相关文章
- Desert King (poj 2728 最优比率生成树 0-1分数规划)
Language: Default Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22113 A ...
- poj 2728 最优比例生成树(01分数规划)模板
/* 迭代法 :204Ms */ #include<stdio.h> #include<string.h> #include<math.h> #define N 1 ...
- 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 最优比率生成树
Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20978 Accepted: 5898 [Des ...
- POJ 2728 Desert King ★(01分数规划介绍 && 应用の最优比率生成树)
[题意]每条路径有一个 cost 和 dist,求图中 sigma(cost) / sigma(dist) 最小的生成树. 标准的最优比率生成树,楼教主当年开场随手1YES然后把别人带错方向的题Orz ...
- [USACO]地震 (二分答案+最优比率生成树详解)
题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...
- [转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环
01分数规划 前置技能 二分思想最短路算法一些数学脑细胞? 问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此 ...
- 2018.09.12 earthquake(最优比率生成树)
描述 地震已经破坏了农夫约翰所有的农场以及所有连接农场的道路.作为一个意志坚强的人,他决定重建所有的农场.在重建全部N(1 <= N <= 400)个农场之前,首先必须把所有农场用道路连接 ...
随机推荐
- Java设计模式系列之状态模式
状态模式(State)的定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它 ...
- Spring JdbcTemplate Querying examples
Here are few examples to show you how to use JdbcTemplate query() methods to query or extract data f ...
- srcelement、parentElement
srcElement 是Dom事件中的事件最初指派到的元素. 比如有一个div,里面有一个按钮.你响应div的onclick事件,但实际上,你单击的只是它内部的按钮,那么,srcElement指向的, ...
- VB.NET开发中遇到的一个小问题
在修改公司用vb.net的写的代码时,遇到一个小问题 页面上有一个button, ID是btnNext, 在属性页中,它的click事件对应的是cmdNext, 我像在c#中一样,在属性页中双击cmd ...
- Spring MVC Framework 实例
一 SpringMVC基础入门,创建一个HelloWorld程序 1 首先,导入SpringMVC需要的jar包. commons-logging-<version>.jar spring ...
- @Override must override a superclass method 问题解决
一.问题的由来 最近接手了了一个合作企业的项目,前期不是我司开发的,上周做了几天的技术对接,客户端界面由我负责对接,从svn检出之后,迫不及待的导入到了本地的myeclipse中,谁知立马就出现了那个 ...
- CSS基础(01)
1. Css基础 1.1 CSS(层叠样式表 Multiple Styles) CSS 是 Cascading Style Sheets(层叠样式表)的简称. CSS 语言是一种标记语言,它不需要 ...
- Spark 1.3.0 单机安装
一.试验环境: CentOS6.6 最小化安装:主机名spark-test,IP:10.10.10.26 OpenStack虚拟云主机. 注:安装流程:进入linux->安装JDK->安装 ...
- SCOM2007R2安装和报表服务器配置
SCOM2007R2默认安装不可以直接支持SQL Server2008R2,需要SQL Server 2008SP1. 如果数据库安装在另一台计算机上,则在安装了SQL Server的计算机上先运行S ...
- leetcode第一刷_Count and Say
水题. 描写叙述的还挺麻烦的,实际上就是纸老虎,用两个string,一个存上一轮的结果,一个用来更新出这一轮的结果,每次扫描上一轮,统计一个字符出现的次数,然后把这个次数和字符增加到这一轮的字符串中就 ...