POJ 2728 Desert King(最优比率生成树 01分数规划)
http://poj.org/problem?id=2728
题意:
在这么一个图中求一棵生成树,这棵树的单位长度的花费最小是多少?
思路:
最优比率生成树,也就是01分数规划,二分答案即可,题目很简单,因为这题是稠密图,所以用prim算法会好点。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn=+;
const double eps=1e-; int n;
int x[maxn],y[maxn],z[maxn];
bool vis[maxn];
double cost[maxn][maxn],dis[maxn][maxn],d[maxn]; double prim(double x)
{
double sum=;
memset(vis,,sizeof(vis));
vis[]=; d[]=;
for(int i=;i<=n;i++) d[i]=cost[][i]-x*dis[][i];
for(int i=;i<=n;i++)
{
double MIN=INF;
int pos;
for(int j=;j<=n;j++)
{
if(!vis[j] && d[j]<MIN)
{
pos=j;
MIN=d[j];
}
}
vis[pos]=;
sum+=MIN;
for(int j=;j<=n;j++)
{
if(!vis[j] && d[j]>cost[pos][j]-x*dis[pos][j])
d[j]=cost[pos][j]-x*dis[pos][j];
}
}
return sum;
} int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d",&n) && n)
{
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&x[i],&y[i],&z[i]);
for(int j=;j<i;j++)
{
cost[i][j]=cost[j][i]=abs(z[j]-z[i]);
dis[i][j]=dis[j][i]=sqrt((double)(y[i]-y[j])*(y[i]-y[j])+(double)(x[i]-x[j])*(x[i]-x[j]));
}
}
double l=,r=;
double ans=;
while(r-l>=eps)
{
double mid=(l+r)/2.0;
if(prim(mid)>=)
{
ans=mid;
l=mid;
}
else r=mid;
}
printf("%.3f\n",ans);
}
return ;
}
POJ 2728 Desert King(最优比率生成树 01分数规划)的更多相关文章
- POJ 2728 Desert King 最优比率生成树
Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20978 Accepted: 5898 [Des ...
- POJ.2728.Desert King(最优比率生成树 Prim 01分数规划 二分/Dinkelbach迭代)
题目链接 \(Description\) 将n个村庄连成一棵树,村之间的距离为两村的欧几里得距离,村之间的花费为海拔z的差,求花费和与长度和的最小比值 \(Solution\) 二分,假设mid为可行 ...
- POJ 2728 Desert King(最优比率生成树, 01分数规划)
题意: 给定n个村子的坐标(x,y)和高度z, 求出修n-1条路连通所有村子, 并且让 修路花费/修路长度 最少的值 两个村子修一条路, 修路花费 = abs(高度差), 修路长度 = 欧氏距离 分析 ...
- Desert King (poj 2728 最优比率生成树 0-1分数规划)
Language: Default Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22113 A ...
- POJ 2728 Desert King (最优比率树)
题意:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一条路即可,建造水管距离为坐标之间的欧几里德距离,费用为海拔之差,现在要求方案使得费用与距离的比值最小,很显然,这个题目 ...
- POJ 2728 Desert King (最优比例生成树)
POJ2728 无向图中对每条边i 有两个权值wi 和vi 求一个生成树使得 (w1+w2+...wn-1)/(v1+v2+...+vn-1)最小. 采用二分答案mid的思想. 将边的权值改为 wi- ...
- Desert King(最优比率生成树)
Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22717 Accepted: 6374 Desc ...
- POJ2728 Desert King —— 最优比率生成树 二分法
题目链接:http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS Memory Limit: 65536K Total Subm ...
- 【POJ2728】Desert King 最优比率生成树
题目大意:给定一个 N 个点的无向完全图,边有两个不同性质的边权,求该无向图的一棵最优比例生成树,使得性质为 A 的边权和比性质为 B 的边权和最小. 题解:要求的答案可以看成是 0-1 分数规划问题 ...
随机推荐
- 如何快速获取ListView的打气筒对象
简单的方式有三种: @Override public View getView(int position, View convertView, ViewGroup parent) { View vie ...
- 【SVM】A Practical Guide to Support Vector Classication
零.简介 一般认为,SVM比神经网络要简单. 优化目标:
- soft nofile
原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2096461 写这个文章是为了以正视听,网上的文章人云亦云到简直令人发指.到底最大文件数被什么限制了?too ...
- 爆出的法拉第未来(Faraday Future,以下简称“FF”)
在本次融资"乌龙"之前,FF已经传出过两次融资消息,传闻对象既有印度大型财团,也是捷豹路虎的控股方塔塔集团,也有香港李嘉诚之子"小巨人"李泽楷,但最后都被各方否 ...
- PHP获取http头信息
PHP手册提供了现成的函数: getallheaders (PHP 4, PHP 5) getallheaders — Fetch all HTTP request headers 说明 array ...
- 学习Css补充知识点
1.text-transform: capitalize;UpperCase等 2.border-size:box,边框在定义的宽高范围内画, content默认,在宽高外画.元互的宽高只指内容 3 ...
- VS2010/MFC编程入门之三十九(文档、视图和框架:概述)
前面几节讲了菜单.工具栏和状态栏的使用,鸡啄米本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工 ...
- python 读不同编码的文本,传递一个可选的encoding 参数给open() 函数
文件的读写操作默认使用系统编码,可以通过调用sys.getdefaultencoding() 来得到.在大多数机器上面都是utf-8 编码.如果你已经知道你要读写的文本是其他编码方式,那么可以通过传递 ...
- Neutron网络学习
学习 Neutron 系列文章: 转http://www.cnblogs.com/sammyliu/p/4622563.html (1)Neutron 所实现的网络虚拟化 (2)Neutron Ope ...
- 负载均衡之-haproxy
老规矩,先介绍?复制一段? 1)HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. 2)HAProxy特别适用于那些负载特大的 ...