POJ 2728 最优比率生成树
来源:互联网 发布:linux canopen协议栈 编辑:程序博客网 时间:2024/06/06 01:44
题目LINK: http://poj.org/problem?id=2728
原理参考 : http://www.cnblogs.com/lotus3x/archive/2009/03/21/1418480.html
http://hi.baidu.com/zzningxp/item/28aa46e0fd86bdc2bbf37d03
原理参考 : http://www.cnblogs.com/lotus3x/archive/2009/03/21/1418480.html
http://hi.baidu.com/zzningxp/item/28aa46e0fd86bdc2bbf37d03
做法就是,二分这个比率r, 把生成树的边的权值设为 cost[i] - r * len[i] , 求最小生成树结果。如果结果为0,则是最有比率,否则不断二分(单调递减的函数)
//minimum ratio of overall cost of the channels to the total length.#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;#define INF 1e10#define eps 0.00001#define N 1111struct point{ double x, y, h;}p[N];double cost[N][N], len[N][N], dis[N][N], dd[N];int n;bool vis[N];double get_dis(int i, int j){ return sqrt((p[i].x - p[j].x) * (p[i].x - p[j].x) + (p[i].y - p[j].y) * ( p[i].y - p[j].y));}double get_h(int i, int j){ return fabs(p[i].h - p[j].h);}double sol(double in){ for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) dis[i][j] = cost[i][j] - in * len[i][j]; double ret = 0; memset(vis, 0, sizeof(vis)); for(int i=1; i<=n; i++) dd[i] = INF; dd[1] = 0; for(int i=1; i<=n; i++) { double mi = INF; int id = -1; for(int j=1; j<=n; j++) { if(vis[j]) continue; if(dd[j] < mi) { mi = dd[j] ; id = j; } } vis[id ] = 1; ret += mi; for(int j=1; j<=n; j++) { if(vis[j] ) continue; if(dd[j] > dis[id][j]) dd[j] = dis[id][j] ; } } return ret;}int main(){#ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin);#endif // ONLINE_JUDGE while(scanf("%d", &n) && n) { for(int i=1; i<=n; i++) { scanf("%lf%lf%lf", &p[i].x, &p[i].y, &p[i].h); } for(int i=1; i<=n; i++) { for(int j=i; j<=n; j++) { if(i == j) cost[i][j] = len [i][j] = 0; else { len[i][j] = len[j][i] = get_dis(i, j); cost[i][j] = cost[j][i] = get_h(i, j); } } } double l = 0, r = 10001111;// r == 1000 竟然也可以跑过! while(fabs(l - r) > eps) { double m = (l+r)/2; double tmp = sol(m); if(tmp > eps) l= m; else r = m; } printf("%.3lf\n", l); } return 0;}
0 0
- poj 2728 最优比率生成树
- POJ 2728 最优比率生成树
- POJ 2728 最优比率生成树
- POJ 2728 最优比率生成树
- (最优比率生成树 )POJ 2728
- POJ 2728 最优比率生成树
- POJ 2728 最小生成树 求最优比率生成树
- POJ 2728 最优比率生成树 01分数规划问题
- poj 2728 Desert King(最优比率生成树)
- poj 2728 Desert King(最优比率生成树)
- POJ 2728 Desert King(最优比率生成树) prim+二分
- 【POJ】【2728】 Desert King 最优比率生成树
- POJ 2728 Desert King (最优比率生成树)
- poj 2728 最优比率生成树(国王修运河)
- poj 2728 Desert King 最优比率生成树 分数规划
- poj 2728 Desert King (最优比率生成树)
- POJ 2728 Desert King(初遇最优比率生成树)
- poj 2728 Desert King(最优比率生成树)
- 如何解锁oracle用户的三种方法
- 开篇语
- 虚拟地址 物理地址还可以这样理解
- 软件工程的几个步骤
- 嵌入式系统多媒体框架分析
- POJ 2728 最优比率生成树
- 49. 搜狗面试题: 大数相乘算法
- java执行root shell命令
- POJ 1061 青蛙的约会
- Android通讯录管理(获取联系人、通话记录、短信消息)(一)
- js判断单选按钮是否选中
- [Liferay]liferay hooks 修改 jsp
- 福建省茶树良种:肉桂
- hdu 2899