秦始皇统一中国之后要在全国修公路连接各个城市,皇帝只想修成最小生成树(距离最小,不考虑人力),一个道士说自己可以不花人力物力修一条路,经过两方妥协,选择max(两个城市人口/(生成树长度-这条路的长度(连接两个城市的路中,权值最大的那段路)))的路让他变,求这个比值最大值。

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x7fffffff;
int n;
int pre[maxn], vis[maxn];
double graph[maxn][maxn], maxd[maxn][maxn], d[maxn];
struct node
{
int x, y, p;
}Node[maxn]; double prime(int s)
{
double sum = ;
mem(vis, );
mem(maxd, );
int temp;
rap(i, , n) d[i] = graph[s][i], pre[i] = s;
d[s] = ;
vis[s] = ;
rap(i, , n-)
{
double mincost = INF;
rap(j, , n)
if(!vis[j] && mincost > d[j])
{
temp = j;
mincost = d[j];
}
rap(j, , n)
if(vis[j] && j != temp) maxd[temp][j] = maxd[j][temp] = max(mincost, maxd[pre[temp]][j]);
sum += mincost;
vis[temp] = ;
// used[temp][pre[temp]] = used[pre[temp]][temp] = 1;
rap(j, , n)
{
if(!vis[j] && d[j] > graph[temp][j])
d[j] = graph[temp][j], pre[j] = temp;
}
}
return sum;
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
//求次小生成树还是得需要这段代码,用来找到不在生成树里的边
// scanf("%d", &n);
// for(int i=1; i<=n; i++)
// for(int j=1; j<=n; j++)
// if(i == j) graph[i][j] = 0;
// else graph[i][j] = graph[j][i] = INF;
rap(i, , n)
{
scanf("%d%d%d", &Node[i].x, &Node[i].y, &Node[i].p);
}
rap(i, , n)
rap(j, i+, n)
graph[i][j] = graph[j][i] = sqrt((double)(Node[i].x - Node[j].x)*(Node[i].x - Node[j].x) + (double)(Node[i].y - Node[j].y)*(Node[i].y - Node[j].y));
double dis = prime();
double sum = -;
rap(i, , n)
rap(j, i+, n)
if(pre[i] == j || pre[j] == i) //对于当前结点i和j 如果i和j之间有直接边(在生成树中的) 则dis减直接边
sum = max(sum, 1.0*(Node[i].p + Node[j].p)/(dis - graph[i][j]));
else //没有直接边 则减i和j之间那条路中权值最大的那段路
sum = max(sum, 1.0*(Node[i].p + Node[j].p)/(dis - maxd[i][j]));
printf("%.2f\n", sum); } return ;
}

Qin Shi Huang's National Road System UVA - 1494(次小生成树)的更多相关文章

  1. hdu 4081 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 ...

  2. 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 ...

  3. hdu 4081 Qin Shi Huang's National Road System (次小生成树的变形)

    题目:Qin Shi Huang's National Road System Qin Shi Huang's National Road System Time Limit: 2000/1000 M ...

  4. HDU 4081 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 ...

  5. Qin Shi Huang's National Road System HDU - 4081(树形dp+最小生成树)

    Qin Shi Huang's National Road System HDU - 4081 感觉这道题和hdu4756很像... 求最小生成树里面删去一边E1 再加一边E2 求该边两顶点权值和除以 ...

  6. [hdu P4081] Qin Shi Huang’s National Road System

    [hdu P4081] Qin Shi Huang’s National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

  7. HDU4081 Qin Shi Huang's National Road System 2017-05-10 23:16 41人阅读 评论(0) 收藏

    Qin Shi Huang's National Road System                                                                 ...

  8. HDU4081: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 ...

  9. HDU 4081—— Qin Shi Huang's National Road System——————【次小生成树、prim】

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

随机推荐

  1. URL特别字符处理

    import time,os,datetimeimport urllib3utcNow = datetime.datetime.utcnow()fifteen = utcNow +datetime.t ...

  2. 数据库sql优化总结之2-百万级数据库优化方案+案例分析

    项目背景 有三张百万级数据表 知识点表(ex_subject_point)9,316条数据 试题表(ex_question_junior)2,159,519条数据 有45个字段 知识点试题关系表(ex ...

  3. 《More Effective C++》读书笔记(零)Basic 基础条款

    这是篇读书笔记,只记录自己的理解和总结,一般情况不对其举例子具体说明,因为那正是书本身做的事情,我的笔记作为梳理和复习之用,划重点.我推荐学C++的人都好好读一遍Effective C++ 系列,真是 ...

  4. 技本功丨用短平快的方式告诉你:Flink-SQL的扩展实现

    2019年1月28日,阿里云宣布开源“计算王牌”实时计算平台Blink回馈给ApacheFlink社区.官方称,计算延迟已经降到毫秒级,也就是你在浏览网页的时候,眨了一下眼睛,淘宝.天猫处理的信息已经 ...

  5. dp算法之硬币找零问题

    题目:硬币找零 题目介绍:现在有面值1.3.5元三种硬币无限个,问组成n元的硬币的最小数目? 分析:现在假设n=10,画出状态分布图: 硬币编号 硬币面值p 1 1 2 3 3 5 编号i/n总数j ...

  6. Polycarp and Letters(set首战!)

    Description Polycarp loves lowercase letters and dislikes uppercase ones. Once he got a string s con ...

  7. Controller与Switch建立连接

    连接建立 控制器和交换机认识的过程. 用于交互Openflow版本,如果不同则没有后续. 同1. 特征请求,控制器询问交换机的特征信息. 交换机回复控制器,相当于把整个交换机的所有配置都告诉控制器了. ...

  8. Alpha 冲刺(9/10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...

  9. HDU 5666 Segment 数论+大数

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5666 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  10. sublime插件时间

    import datetime import sublime_plugin class AddCurrentTimeCommand(sublime_plugin.TextCommand): def r ...