POJ2728 Desert King
一道生成树+\(0/1\)分数规划
原题链接
设每条边的距离为\(dis[x]\),两点高度差为\(h[x]\),该图的生成树为\(T\),则题目实际求的就是\(\dfrac{\sum\limits_{x\in T}h[x]}{\sum\limits_{x\in T}dis[x]}\)的最小值。
这就是经典的\(0/1\)分数规划问题。
这里我用的是二分法。二分答案,记为\(mid\)。将图上的边权全部改为\(h[x]-mid\times dis[x]\),然后在上面跑最小生成树并计算边权和,如果非负说明\(mid\)过小,否则过大。
另外,虽然理论二分上界为\(10^7\),不过数据水,上界开四五十基本就能过了。
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N = 1010;
struct dd {
int x, y, z;
};
dd a[N];
int n;
double D[N][N], dis[N];
bool v[N];
int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c<'0' || c>'9'; c = getchar())
p |= c == '-';
for (; c >= '0'&&c <= '9'; c = getchar())
x = x * 10 + (c - '0');
return p ? -x : x;
}
inline double minn(double x, double y)
{
return x < y ? x : y;
}
inline int jd(int x)
{
return x < 0 ? -x : x;
}
inline double co(int x, int y, double mid)
{
return -mid * D[x][y] + jd(a[x].z - a[y].z);
}
double judge(double mid)
{
double s = 0;
int i, j, x;
memset(v, 0, sizeof(v));
memset(dis, 66, sizeof(dis));
dis[1] = 0;
for (i = 1; i <= n; i++)
{
x = 0;
for (j = 1; j <= n; j++)
if (!v[j] && (dis[j] < dis[x] || !x))
x = j;
if (!x)
break;
v[x] = 1;
s += dis[x];
for (j = 1; j <= n; j++)
if (!v[j])
dis[j] = minn(dis[j], co(x, j, mid));
}
return s;
}
int main()
{
int i, j;
double l, r, mid;
while (1)
{
n = re();
if (!n)
return 0;
for (i = 1; i <= n; i++)
{
a[i].x = re();
a[i].y = re();
a[i].z = re();
}
for (i = 1; i < n; i++)
for (j = i + 1; j <= n; j++)
D[i][j] = D[j][i] = sqrt(1.0*(a[i].x - a[j].x)*(a[i].x - a[j].x) + 1.0*(a[i].y - a[j].y)*(a[i].y - a[j].y));
l = 0;
r = 1e7;
while (l + 1e-4 < r)
{
mid = (l + r) / 2;
if (judge(mid) >= 0)
l = mid;
else
r = mid;
}
printf("%.3f\n", l);
}
return 0;
}
POJ2728 Desert King的更多相关文章
- POJ2728 Desert King 【最优比率生成树】
POJ2728 Desert King Description David the Great has just become the king of a desert country. To win ...
- poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】
含[最小生成树Prim]模板. Prim复杂度为$O(n^2),适用于稠密图,特别是完全图的最小生成树的求解. Desert King Time Limit: 3000MS Memory Li ...
- POJ2728 Desert King —— 最优比率生成树 二分法
题目链接:http://poj.org/problem?id=2728 Desert King Time Limit: 3000MS Memory Limit: 65536K Total Subm ...
- [POJ2728] Desert King 解题报告(最优比率生成树)
题目描述: David the Great has just become the king of a desert country. To win the respect of his people ...
- poj2728 Desert King --- 01分数规划 二分水果。。
这题数据量较大.普通的求MST是会超时的. d[i]=cost[i]-ans*dis[0][i] 据此二分. 但此题用Dinkelbach迭代更好 #include<cstdio> #in ...
- POJ2728 Desert King 最优比率生成树
题目 http://poj.org/problem?id=2728 关键词:0/1分数规划,参数搜索,二分法,dinkelbach 参考资料:http://hi.baidu.com/zzningxp/ ...
- 【最优比率生成树】poj2728 Desert King
最优比率生成树教程见http://blog.csdn.net/sdj222555/article/details/7490797 个人觉得很明白易懂,但他写的代码略囧. 模板题,但是必须Prim,不能 ...
- poj2728 Desert King——01分数规划
题目:http://poj.org/problem?id=2728 第一道01分数规划题!(其实也蛮简单的) 这题也可以用迭代做(但是不会),这里用了二分: 由于比较裸,不作过多说明了. 代码如下: ...
- poj2728 Desert King(最小生成树+01分数规划=最优比率生成树)
题意 n个点完全图,每个边有两个权值,求分数规划要求的东西的最小值. (n<=1000) 题解 心态炸了. 堆优化primT了. 普通的就过了. 我再也不写prim了!!!! 咳咳 最优比率生成 ...
随机推荐
- HTML 视频
在html5中使用视频,只要添加元素<video></video>元素表示. <video>有几个属性: src 指定音频文件的路径 poster 视频播放之前显示 ...
- js基础-直接量与变量
直接量 123 "abc" console.log("234") true false 变量 var x = 123 变量可先声明后赋值 var定义的都是局部变 ...
- Memory Controller
1.S3C6410 地址空间 For memory at the table details 2. SDRAM图解 3. SDRAM 芯片容量计算: L_BANK 数目 * 一个 L_BANK 中的单 ...
- 2017面向对象程序设计(Java)第2周学习指导及要求(2017.8.28-2017.9.3)
学习目标 继续适应老师教学方式的变化,能按照翻转课堂教学要求完成课前知识学习: 掌握Java Application程序结构: 掌握Java的数据类型与变量: 学会使用运算符构造各类表达式: 掌握输入 ...
- 论Ubuntu下的docker多难搭建
慷慨一下: 上周四开始打算在Ubuntu系统下面熟悉操作一下docker,所以深知在本地的虚拟机上搭建一个docker非常的easy. 但是,要下载一个镜像,真是太难了.基本可以说是下载不了的.于是乎 ...
- Python 图示集绵
http://nbviewer.jupyter.org/github/pyecharts/pyecharts-users-cases/blob/master/notebook-users-cases/ ...
- LocalDateTime TypeMismatch
@DateTimeFormat(pattern = "yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd", timez ...
- 今天设置apache二级域名ssl证书后出现问题
用集成环境 phpwamp重启服务失败,但是重启电脑后apache就启动成功,也不知道哪里原因,待以后解决.
- CentOS 端口映射
一个合作单位给我创建了十几台虚拟服务器做支撑.但是只给负载均衡绑定了公网IP.由于这个支撑的服务需要测试和调优,经常要往服务器上传class或者修改数据库.为了方便操作,我打算在负载均衡服务器上做端口 ...
- django的优缺点(非原创)
Django 大包大揽,用它来快速开发一些 Web 应用是不错的.如果你顺着 Django 的设计哲学来,你会觉得 Django 很好用,越用越顺手:相反,你如果不能融入或接受 Django 的设计哲 ...