博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2728 最优比率生成树
阅读量:5939 次
发布时间:2019-06-19

本文共 1218 字,大约阅读时间需要 4 分钟。

(今天才学会Prim 尴尬……)

这题好久之前(四个月之前)就写过。。 当时WA了……抄得题解

现在终于搞对了。

// by SiriusRen#include 
#include
#include
#define N 1005using namespace std;int n,now;double map[N][N],h[N][N],low,high,ans,d[N],minn;bool vis[N];struct Node{
int x,y,h;}v[1005];void prim(double x){ for(int i=1;i<=n;i++)d[i]=h[1][i]-x*map[1][i]; memset(vis,0,sizeof(vis)),vis[1]=1; now=1,ans=0; for(int i=1;i
d[j])minn=d[j],now=j; ans+=minn,vis[now]=1; for(int j=1;j<=n;j++)if(!vis[j]&&d[j]>h[now][j]-x*map[now][j])d[j]=h[now][j]-x*map[now][j]; }}int main(){ while(scanf("%d",&n)&&n){ high=N*N*N,low=0; for(int i=1;i<=n;i++)scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].h); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ map[i][j]=sqrt(1.0*(v[i].x-v[j].x)*(v[i].x-v[j].x)+1.0*(v[i].y-v[j].y)*(v[i].y-v[j].y)); h[i][j]=abs(v[i].h-v[j].h); } while(high-low>=1e-6){ double mid=(high+low)/2; prim(mid); if(ans>0)low=mid; else high=mid; } printf("%.3lf\n",low); }}

这里写图片描述

转载于:https://www.cnblogs.com/SiriusRen/p/6532354.html

你可能感兴趣的文章
领域驱动设计,构建简单的新闻系统,20分钟够吗?
查看>>
web安全问题分析与防御总结
查看>>
React 组件通信之 React context
查看>>
ZooKeeper 可视化监控 zkui
查看>>
Linux下通过配置Crontab实现进程守护
查看>>
ios 打包上传Appstore 时报的错误 90101 90149
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
密码概述
查看>>
autoconf,automake,libtool
查看>>
jQuery的技巧01
查看>>
基于泛型实现的ibatis通用分页查询
查看>>
gopacket 使用
查看>>
AlertDialog对话框
查看>>
我的友情链接
查看>>
办公室几台电脑怎么连一台打印机的具体步骤
查看>>
linux安全---cacti+ntop监控
查看>>
鸟哥的linux私房菜-shell简单学习-1
查看>>
nagios配置监控的一些思路和工作流程
查看>>
通讯组基本管理任务三
查看>>
赫夫曼编码实现
查看>>