题目大意:

有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,

只要两个村庄之间有一条路即可,建造水管距离为坐标之间的欧几里德距离,费用为海拔之差,

现在要求方案使得费用与距离的比值最小,很显然,这个题目是要求一棵最优比率生成树。

————————————————————————————————————

这是一道最优比率生成树的题目,是个很明显的0-1分数规划,设每条边代价为ci,距离为di

那么题目要求(∑(ci*xi))/(∑(di*xi))的最小值 xi∈{0,1}

我们进行一波转换

z=(∑(ci*xi))-r'*(∑(di*xi)),其中z是左边这个式子的最小值

由于di为正数,xi为非负数,所以

r'>r 时 z(r')<0

r'=r 时 z(r')=0

r'<r 时 z(r')>0

那么二分这个最小值,将这个式子化成xi(ci-r'*di)的形式,每条边的权值变成ci-r'*di

对于这些边,求一棵最小生成树,MST的值即为z(r')

这样问题就解决了QAQ(注:! 这里输出要%.3f 不能lf !!! 我错了五次就在这里

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int M=1e4+;
const double inf=1e15;
int n;
int v[M][M];
int x[M],y[M],w[M],vis[M];
double d[M],map[M][M];
double calc(int s1,int s2){return sqrt(1.0*(x[s1]-x[s2])*(x[s1]-x[s2])+1.0*(y[s1]-y[s2])*(y[s1]-y[s2]));}
double prim(double k){
double sum=;
memset(vis,,sizeof(vis));
d[]=; vis[]=;
for(int i=;i<=n;i++) d[i]=(double)v[][i]-k*map[][i];
for(int i=;i<=n;i++){
double mn=inf;
int h=;
for(int j=;j<=n;j++) if(!vis[j]&&mn>d[j]) mn=d[j],h=j;
sum+=mn; d[h]=; vis[h]=;
for(int j=;j<=n;j++) if(!vis[j]&&((double)v[h][j]-k*map[h][j])<d[j]) d[j]=(double)v[h][j]-k*map[h][j];
}
return sum;
}
int main()
{
while((scanf("%d",&n)!=EOF)&&n){
for(int i=;i<=n;i++) scanf("%d %d %d",&x[i],&y[i],&w[i]);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++) map[i][j]=map[j][i]=calc(i,j),v[i][j]=v[j][i]=abs(w[i]-w[j]);
double l=0.0,r=100000.0;
while(r-l>1e-){
double mid=(l+r)/;
if(prim(mid)>=) l=mid;
else r=mid;
}printf("%.3f\n",r);
}
return ;
}

poj2728 最小比率生成树——01分数规划的更多相关文章

  1. POJ2728 最小比率生成树/0-1分数规划/二分/迭代(迭代不会)

    用01分数规划 + prime + 二分 竟然2950MS惊险的过了QAQ 前提是在TLE了好几次下过的 = = 题目意思:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一 ...

  2. POJ 2728 Desert King(最优比率生成树 01分数规划)

    http://poj.org/problem?id=2728 题意: 在这么一个图中求一棵生成树,这棵树的单位长度的花费最小是多少? 思路: 最优比率生成树,也就是01分数规划,二分答案即可,题目很简 ...

  3. Desert King (poj 2728 最优比率生成树 0-1分数规划)

    Language: Default Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 22113   A ...

  4. 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)

    题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...

  5. zoj 2676 二分+ISAP模板求实型参数的最小割(0-1分数规划问题)(可做ISAP模板)

    /* 参考博文:http://www.cnblogs.com/ylfdrib/archive/2010/09/01/1814478.html 以下题解为转载代码自己写的: zoj2676 胡伯涛论文& ...

  6. BZOJ1486 HNOI2009 最小圈 【01分数规划】

    BZOJ1486 HNOI2009 最小圈 Description 应该算是01分数规划的裸板题了吧..但是第一次写还是遇到了一些困难,vis数组不清零之类的 假设一个答案成立,那么一定可以找到一个环 ...

  7. 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)

    传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...

  8. poj2728 生成树01分数规划 (二分答案)

    给定整数序列a,b,求出下式的最大值 sum{ai*xi}/sum{bi*xi},xi=0|1 通俗来说,就是选出一些整数对(ai,bi),使得选出的a之和与选出的b之和商最大化 二分答案L,即选出的 ...

  9. 【POJ2728】Desert King - 01分数规划

    Description David the Great has just become the king of a desert country. To win the respect of his ...

随机推荐

  1. C语言结构体指针成员强制类型转换

    #include <stdio.h> #include <stdlib.h> typedef struct ListElmt_ { void *data; struct Lis ...

  2. 【机器学习算法基础+实战系列】SVM

    概述 支持向量机是一种二分类模型,间隔最大使它有别于感知机.支持向量机学习方法由简至繁的模型:线性可分支持向量机(linear support vector machine in linearly s ...

  3. python—— 文件的打开模式和文件对象方法 & os、os.path 模块中关于文件、目录常用的函数使用方法

    引用自“鱼c工作室”     文件的打开模式和文件对象方法  : https://fishc.com.cn/forum.php?mod=viewthread&tid=45279&ext ...

  4. 4、spring boot 配置文件之profile

    Profile  1.多Profile文件 我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml 默认使用application.prop ...

  5. ArrayList & Vector的源码实现

    #ArrayList & Vector #####前言: 本来按照计划,ArrayList和Vector是分开讲的,但是当我阅读了ArrayList和Vector的源码以后,我就改变了注意,把 ...

  6. Android面试收集录17 Android进程优先级

    在安卓系统中:当系统内存不足时,Android系统将根据进程的优先级选择杀死一些不太重要的进程,优先级低的先杀死.进程优先级从高到低如下. 前台进程 处于正在与用户交互的activity 与前台act ...

  7. 11.1,nginx集群概念

    集群介绍 为什么要用集群      

  8. 剑指Offer - 九度1384 - 二维数组中的查找

    剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  9. iOS-QQ好友列表实现

    0.QQ好友列表实现 0.首先说说实现思路 自定义UITableView,每一个分组都是一个UITableViewHeaderFooterView,然后自定义cell,这里分组的实现主要是自定义UIT ...

  10. 关于JavaScript设计模式的学习(二)

    第二部分来了,是关于结构型的,同样的,还是在简书中,GitHub上也有代码示例和详细注释 简书:http://www.jianshu.com/p/face1be4b846 github:https:/ ...