先发发牢骚:图论500题上说这题是最小生成树+DFS,网上搜题解也有人这么做。但是其实就是次小生成树。次小生成树完全当模版题。其中有一个小细节没注意,导致我几个小时一直在找错。有了模版要会用模版,然后慢慢融会贯通。我要走的路还长着啊。

  这里有两个次小生成树的模版: http://www.cnblogs.com/Potato-lover/p/3949996.html

  此题的解题思想:在prim算法中做一些改变,求出任意两点(u,v)路径之间的最大权值,并记录,记为maxe[u][v]。运行一遍prim算法。枚举每一条边,如果该边是属于最小生成树的边,则ratio=(value(u) +value(v) ) /( ans-map[u][v] ),其中ans是最小生成树的权值之和。否则,ratio=(value(u) +value(v) ) /( ans-maxe[u][v] )。更新ratio的值,取最大值。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=,INF=0x3f3f3f3f;
int pre[N];
double dist[N],Map[N][N],maxe[N][N];
//向外延伸的最短边长,记录图信息,最长边
bool vis[N];//1表示点已经在树的,0表示点在树外
bool f[N][N];//存在边为1,用过为0
int n;
double Prim()
{
int i,j,k;
double Min,ans=;
memset(vis,,sizeof(vis));
memset(f,,sizeof(f));
memset(maxe,,sizeof(maxe));
for(i=;i<=n;i++)
{
dist[i]=Map[][i];
pre[i]=;
}
dist[]=;
vis[]=;
pre[]=;
for(i=;i<n;i++)
{
Min=INF;
k=;
for(j=;j<=n;j++)
{
if(!vis[j]&&dist[j]<Min)
{
Min=dist[j];
k=j;
}
}
//if(Min==INF) return -1;//G不连通
vis[k]=;
ans+=Min;
f[pre[k]][k] = f[k][pre[k]]=;
for(j=;j<=n;j++)
{
if(vis[j]&&j!=k) maxe[k][j]=maxe[j][k]=max(maxe[j][pre[k]],dist[k]);
if(!vis[j]&&dist[j]>Map[k][j])
{
dist[j]=Map[k][j];
pre[j]=k;
}
}
}
return ans;
}
struct node
{
double x,y,w;
}nd[N];
double Dis(double x,double y,double a,double b)
{
return sqrt((a-x)*(a-x)+(b-y)*(b-y));
}
int main()
{
//freopen("test.txt","r",stdin);
int cas,i,j;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
for(i=;i<=n;i++)
Map[i][i]=;
for(i=;i<=n;i++)
scanf("%lf%lf%lf",&nd[i].x,&nd[i].y,&nd[i].w);
for(i=;i<=n;i++)
for(j=;j<i;j++)
Map[i][j]=Map[j][i]=Dis(nd[i].x,nd[i].y,nd[j].x,nd[j].y);
double ans=Prim(), rat=-;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)if(i!=j)
{
if(!f[i][j])
rat=max(rat,1.0*(nd[i].w+ nd[j].w)/(ans-maxe[i][j])) ;
else
rat=max(rat,1.0*(nd[i].w+ nd[j].w)/(ans-Map[i][j]));
}
}
printf("%0.2f\n",rat);
}
return ;
}

hdu4081 Qin Shi Huang's National Road System 次小生成树的更多相关文章

  1. HDU4081 Qin Shi Huang's National Road System —— 次小生成树变形

    题目链接:https://vjudge.net/problem/HDU-4081 Qin Shi Huang's National Road System Time Limit: 2000/1000 ...

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

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

  4. HDU 4081 Qin Shi Huang's National Road System [次小生成树]

    题意: 秦始皇要建路,一共有n个城市,建n-1条路连接. 给了n个城市的坐标和每个城市的人数. 然后建n-2条正常路和n-1条魔法路,最后求A/B的最大值. A代表所建的魔法路的连接的城市的市民的人数 ...

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

    Qin Shi Huang's National Road System                                                                 ...

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

  7. hdu-4081 Qin Shi Huang's National Road System(最小生成树+bfs)

    题目链接: Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: ...

  8. HDU4081 Qin Shi Huang's National Road System(次小生成树)

    枚举作为magic road的边,然后求出A/B. A/B得在大概O(1)的时间复杂度求出,关键是B,B是包含magic road的最小生成树. 这么求得: 先在原图求MST,边总和记为s,顺便求出M ...

  9. HDU4081 Qin Shi Huang's National Road System

    先求最小生成树 再遍历每一对顶点,如果该顶点之间的边属于最小生成树,则剪掉这对顶点在最小生成树里的最长路径 否则直接剪掉连接这对顶点的边~ 用prim算法求最小生成树最长路径的模板~ #include ...

随机推荐

  1. 【笔记】Linux就该这么学-第六课第四章

    vim使用    a 在光标后一位置插入    i 在光标当前位置插入    o 在光标下面创建个空行    dd 删除(剪切)光标所在行    5dd 删除(剪切)从光标处开始的5行    yy 复 ...

  2. BZOJ 2959: 长跑 LCT_并查集_点双

    真tm恶心...... Code: #include<bits/stdc++.h> #define maxn 1000000 using namespace std; void setIO ...

  3. Windows上使用iverilog+gtkwave仿真

    主要参考了: https://www.cnblogs.com/lsgxeva/p/8280662.html 谢谢! ------------------------------------------ ...

  4. 死磕itchat源码--core.py

    core.py文件中的Core类定义了itchat的所有接口.且,仅仅是定义了接口,全部在component包中实现重构.其用法如下表述: 缺省 源码如下: # -*- encoding: utf-8 ...

  5. PAT_A1129#Recommendation System

    Source: PAT A1129 Recommendation System (25 分) Description: Recommendation system predicts the prefe ...

  6. Selenium的定位元素

    1.浏览器操作 # 刷新 driver.refresh()   # 前进 driver.forward()   # 后退 driver.back() 2.获取标签元素 # 通过ID定位目标元素 dri ...

  7. 关于 docsify ssr 的研究

    关于 docsify ssr 的研究 docsify 虽然不错, 但是不支持 seo .官网虽然提供 seo 的一个简单示例, 但总总问题在 issues 中无人解答. 今天再次尝试, 解决了 ind ...

  8. eclipse导入Javaweb文件出错解决

    在项目名上右击打开properties,如图在箭头指的位置可以看出有个unbound表示导入的资源库出现 异常,需要手动导入,1.点击Server Library{Apache Tomcat v9.0 ...

  9. [luogu1073 Noip2009] 最优贸易 (dp || SPFA+分层图)

    传送门 Description C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分 为 ...

  10. 图论-BFS解无权有向图最短路径距离

    概述 本篇博客主要内容: 对广度优先搜索算法(Breadth-First-Search)进行介绍: 介绍用邻接表的存储结构实现一个图(附C++实现源代码): 介绍用BFS算法求解无权有向图(附C++实 ...