POJ 2728 Desert King(最优比率生成树)
题意:
每条路径有一个 cost 和 dist,求图中 sigma(cost) / sigma(dist) 最小的生成树。
思路:
1. sigma(cost)/sigma(dist) <= r 有 cost - r * dist <= 0
2. r = 0 当然是理想的初始状态,我们不断尝试 r 使结果不断逼近最优值,方能得到结果。
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;const int MAXN = 1010;
const double INFS = 1e15;
const double eps = 1e-5;double x[MAXN], y[MAXN], z[MAXN];
double dist[MAXN][MAXN], cost[MAXN][MAXN], map[MAXN][MAXN], d[MAXN];
int p[MAXN], n;
bool vis[MAXN];double prim(double ratio) {for (int i = 1; i <= n; i++) {map[i][i] = 0.0;for (int j = i+1; j <= n; j++)map[i][j] = map[j][i] = cost[i][j] - ratio*dist[i][j];}for (int i = 1; i <= n; i++)d[i] = map[1][i], vis[i] = false, p[i] = 1;vis[1] = true;for (int k = 1, j; k < n; k++) {double mind = INFS;for (int i = 2; i <= n; i++) if (!vis[i] && mind > d[i])mind = d[i], j = i;vis[j] = true;for (int i = 2; i <= n; i++) if (!vis[i] && d[i] > map[j][i])d[i] = map[j][i], p[i] = j;}double d1 = 0, c1 = 0;for (int i = 2; i <= n; i++) {d1 += dist[i][p[i]];c1 += cost[i][p[i]];}return c1 / d1;
}int main() {while (scanf("%d", &n) && n) {for (int i = 1; i <= n; i++)scanf("%lf%lf%lf", &x[i], &y[i], &z[i]);for (int i = 1; i <= n; i++) {dist[i][i] = cost[i][i] = 0.0;for (int j = i+1; j <= n; j++) {dist[i][j] = dist[j][i] = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));cost[i][j] = cost[j][i] = fabs(z[i] - z[j]);}}double r1 = 0.0, r2 = 0.0;while (true) {r2 = prim(r1);if (fabs(r1 - r2) < eps)break;r1 = r2;}printf("%.3lf\n", r1);}return 0;
}
转载于:https://www.cnblogs.com/kedebug/archive/2013/04/29/3050869.html
POJ 2728 Desert King(最优比率生成树)相关推荐
- POJ 2728 Desert King [最优比率生成树]
RT 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 我想哭 凭什么!一模一样的代码一个TLE一个AC,改小二分范围和精度才过 凭什么! 我眼睁睁的看着那段代码 ...
- poj 2728 Desert King(最小比率生成树 / 0-1分数规划 / 二分)
二分答案,我们要找最小的答案,如果有更小的答案说明 ∑W−Z∗∑L<=0∑W−Z∗∑L <= 0∑W−Z∗∑L<=0. #include<cstdio> #include ...
- POJ-2728 Desert King 最优比例生成树 01分数规划/参数搜索
题意:给定N个三维平面点,每个点都有一个高度,每两个点之间的需要构边,边的距离由x,y坐标的欧几里得距离确定,边的花费有点的高度差即z值确定,现在问一个合理的生成树中,花费比上距离的最小值为多少? 解 ...
- 转载二分 01 分数规划即最大化平均值的证明0/1分数规划、最优比率生成树、最优比率环
首页 新随笔 联系 管理 订阅 随笔- 20 文章- 0 评论- 9 [Algorithm]01分数规划--Update:2012年7月27日 [关键字] 0/1分数规划.最优比率生成树.最优比率 ...
- poj2728(最优比率生成树)
1.最优比率生成树(最优比例生成树): 定义:有向带权图G, 对于图中每条边e[i], 都有cost[i]权值)和dist[i](距离), 要求的是一棵生成树T, 它使得 ∑(cost[i]) / ∑ ...
- [USACO]地震 (二分答案+最优比率生成树详解)
题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...
- POJ 2728 最优比率生成树
题意: 让你求一颗最小比率生成树. 思路: 我总结过了,在这里:http://blog.csdn.net/u013761036/article/details/26666261 ...
- wenbao与最优比率生成树
推荐博客 http://www.cnblogs.com/KirisameMarisa/p/4187637.html ------------------------------------------ ...
- POJ 3621 Sightseeing Cows [最优比率环]
感觉去年9月的自己好$naive$ http://www.cnblogs.com/candy99/p/5868948.html 现在不也是嘛 裸题,具体看学习笔记 二分答案之后判负环就行了 $dfs$ ...
- 【POJ - 2728】Desert King (最有比率生成树,分数规划)
题干: David the Great has just become the king of a desert country. To win the respect of his people, ...
最新文章
- Web Service未定义的解决办法
- 读书笔记-《大话数据结构》第二章算法
- 洛谷 P4245 【模板】MTT
- 怎么把springboot部署到阿里云_听说“一分钟就能部署阿里云ECS集群”?
- Android的sdk、api及工程目录说明
- 广告roi怎么计算公式_信息流ROI出价技巧详解及计算公式
- MATLAB for Mac(可视化数学分析软件)R2021b_Update_3
- 一脸懵逼学习Hive的使用以及常用语法(Hive语法即Hql语法)
- 如何使用南方CASS绘制地形图
- PDF转DWG格式怎么转?分享两种好用转换方法
- Android NDK墓碑/崩溃分析
- Ubuntu 20.04 创建桌面快捷方式
- 下一代微型计算机,「简讯」GTX 1650完整规格曝光;任天堂推迟下一代Switch上市时间…...
- 计算机中电容状态表示什么,电容上面是字母代表什么
- 【LittleXi】sql学习笔记
- 个人微信小程序开发案例(附带源码以及教程,不懂后台小程序可提问)
- 基于java的药店管理系统
- H12-821题库详解(301-400)
- 晶体谐振器和晶体振荡器的优缺点分析
- 计算机软件系统一般分为什么两大部分,1、计算机软件系统一般分为( A )两大部分...
热门文章
- Mac效率工具:Mosaic 1.3.3
- 浅谈Get和Post方法的区别与TCP与UDP区别
- CVE-2017-4901 VMware虚拟机逃逸漏洞分析【Frida Windows实例】
- t_user is not mapped [from t_user as u where u.loginname = :loginname and u.password =:password]
- 【CentOS 7笔记26】,打包和压缩工具的使用#171108
- 《数据结构与算法 C语言版》—— 2.2线性表的顺序表示与实现
- findmnt-寻找挂载的文件系统
- 为什么机器学习行业的发展离不开 “开源”
- HTTP缓存原理及相关知识(1)
- (译)cocos2d精灵教程:第三部分