UVALive - 5713 最小生成树
题意:
秦始皇修路,已知n个城市的坐标以及该城市的人口数,修路的费用是两个城市之间的欧几里得距离,其中可以有一条路不用花费代价但是要求这条路连接的两个城市的人口之和A/B尽量大,其中B是修路的总费用。
输入t组数据
输入n城市个数
输入n行x,y,z表示坐标和人口数
输出A/B.
代码:
//类似次小生成树的处理方法,先求出最小生成树值ans,枚举要选的边u-v,ans减去u-v路径中的最大权值之后比较比值大小。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const double inf=10000007.0;
int t,n,vis[],pre[];
double maxl[][],dis[],x[],y[],w[],mp[][];
double Prim(){
memset(maxl,,sizeof(maxl));
for(int i=;i<n;i++){
dis[i]=mp[][i];
vis[i]=;pre[i]=;
}
vis[]=;
double ans=;
for(int i=;i<n;i++){
double minl=inf;int sta=-;
for(int j=;j<n;j++){
if(!vis[j]&&dis[j]<minl){
minl=dis[j];
sta=j;
}
}
if(sta==-) return -;
vis[sta]=;
ans+=minl;
for(int j=;j<n;j++){
if(vis[j]&&j!=sta)
maxl[sta][j]=maxl[j][sta]=max(maxl[pre[sta]][j],dis[sta]);
else if(!vis[j]&&dis[j]>mp[sta][j]){
dis[j]=mp[sta][j];
pre[j]=sta;
}
}
}
return ans;
}
double Smst(double ans){
double tmp=;
for(int i=;i<n-;i++){
for(int j=i+;j<n;j++){
tmp=max(tmp,(w[i]+w[j])/(ans-maxl[i][j]));
}
}
return tmp;
}
int main()
{
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%lf%lf%lf",&x[i],&y[i],&w[i]);
mp[i][i]=;
for(int j=;j<i;j++)
mp[i][j]=mp[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
double ans=Prim();
ans=Smst(ans);
printf("%.2lf\n",ans);
}
return ;
}
UVALive - 5713 最小生成树的更多相关文章
- 训练指南 UVALive - 5713(最小生成树 + 次小生成树)
layout: post title: 训练指南 UVALive - 5713(最小生成树 + 次小生成树) author: "luowentaoaa" catalog: true ...
- 最小生成树求最大比率 UVALive - 5713
题目链接:https://vjudge.net/problem/UVALive-5713 题意:给出t组数据,每组数据第一行给出一个n,表示点的数量,接下来n行,每行有三个数字,分别是点的坐标x,y和 ...
- UVALive 5713 Qin Shi Huang's National Road System秦始皇修路(MST,最小瓶颈路)
题意: 秦始皇要在n个城市之间修路,而徐福声可以用法术位秦始皇免费修1条路,每个城市还有人口数,现要求徐福声所修之路的两城市的人口数之和A尽量大,而使n个城市互通需要修的路长B尽量短,从而使得A/B最 ...
- UVALive 5713 Qin Shi Huang's National Road System(次小生成树)
题意:对于已知的网络构建道路,使城市两两之间能够互相到达.其中一条道路是可以免费修建的,问需要修建的总长度B与免费修建的道路所连接的两城市的人口之和A的比值A/B最大是多少. 因为是求A/B的最大值, ...
- UValive 5713 Qin Shi Huang's National Road System
Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- UESTC 2016 Summer Training #6 Div.2
我好菜啊.. UVALive 6434 给出 n 个数,分成m组,每组的价值为最大值减去最小值,每组至少有1个,如果这一组只有一个数的话,价值为0 问 最小的价值是多少 dp[i][j] 表示将 前 ...
- 最小生成树 prime算法 UVALive - 6437
题目链接:https://vjudge.net/contest/241341#problem/D 这里有多个发电站,需要求出所有点都和发电站直接或间接相连的最小代价,那么就是求出最小生成树的问题了,有 ...
- UVALive - 2515 (最小生成树 kruskal)
You are assigned to design network connections between certain points in a wide area. You are given ...
- UvaLive 4872 Underground Cables (最小生成树)
题意: 就是裸的最小生成树(MST), 完全图, 边长是实数. 分析: 算是复习一下MST把 方法一: prim 复杂度(n^2) #include <bits/stdc++.h> usi ...
随机推荐
- selenium常用操作方法
Webdriver中比较常用的操作元素的方法: clear() 清除输入框的默认内容 send_keys("xxx") 在一个输入框里输入xx内容 ——如果输入中文,则需要在脚本开 ...
- 实现Bidirectional LSTM Classifier----深度学习RNN
双向循环神经网络(Bidirectional Recurrent Neural Networks,Bi-RNN),Schuster.Paliwal,1997年首次提出,和LSTM同年.Bi-RNN,增 ...
- 机器学习(四)正则化与过拟合问题 Regularization / The Problem of Overfitting
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...
- ffmpeg实现mjpeg摄像头的采集-预览-拍照
摄像头输出是mjpeg格式的,需要实现在线预览功能,然后实现拍照功能 1.可以设置采集图像的分辨率,预览分辨率为640*480,可以自定义 2.ctrl+\ 拍照,ctrl+c 退出 void tes ...
- Jquery复选框
Jquery复选框 1.checkbox list选择 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- CDH问题集
1.在CM中添加主机报JDK错误 手动在机器上安装oracle-jdk1.7+update64.然后在CM中选择不安装oracle-jdk即可. 2.HostMoinitor无法与server联系 查 ...
- [经典贪心算法]Prim算法
最小生成树的Prim算法也是贪心算法的一大经典应用.Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树. Prim算法过程: 一条边一条边地加, 维护一棵树. 初始 E = {}空 ...
- 搭建github
http://www.cnblogs.com/liuxianan/p/build-blog-website-by-hexo-github.html
- html .net 网页,网站标题添图标
<link rel="icon" href="../favicon.ico" type="image/x-icon" /> &l ...
- Qt应用程序图标
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt应用程序图标 本文地址:http://techieliang.com/2017/1 ...