题目大意:给一张无向图,图中的每条边都有两个权值,长度d和热度r。找出从起点到终点的一条最大热度最小的路径,如果这样的路径有多条,选择一个最短的。

题目分析:如果只考虑最小的最大热度,那么本题就是一个最小瓶颈路问题,只需按照热度找一棵最小生成树即可。但是,如果这样的路径有多个,实际上是最小生成树有多个时,要找到最短路径,还得把热度不大于最小生成树中最大热度的边并且没在生成树中的边加到最小生成树中,然后再找最短路。

代码如下:

# include<iostream>
# include<cstdio>
# include<queue>
# include<cstring>
# include<algorithm>
using namespace std;
# define LL long long
# define REP(i,s,n) for(int i=s;i<n;++i)
# define CL(a,b) memset(a,b,sizeof(a))
# define CLL(a,b,n) fill(a,a+n,b) const int N=105;
const int INF=1<<30;
const double inf=1e10; struct Edge
{
int fr,to;
double d,r;
bool operator < (const Edge &a) const {
if(r==a.r) return d<a.d;
return r<a.r;
}
};
Edge e[N*100];
int n,m,fa[N],vis[N],pre[N];
double G[N][N],dis[N],ansr; int findFa(int u)
{
if(fa[u]!=u)
return fa[u]=findFa(fa[u]);
return u;
} void kruskal(int s,int t)
{
REP(i,0,n) fa[i]=i;
REP(i,0,n) REP(j,0,n) G[i][j]=inf;
REP(i,0,m){
ansr=e[i].r;
int fr=e[i].fr;
int to=e[i].to;
int u=findFa(fr);
int v=findFa(to);
if(u!=v)
fa[u]=v;
if(findFa(s)==findFa(t))
break;
}
REP(i,0,m) if(e[i].r<=ansr)
G[e[i].fr][e[i].to]=G[e[i].to][e[i].fr]=min(G[e[i].fr][e[i].to],e[i].d);
} void dijkstra(int s)
{
CLL(dis,inf,n);
REP(i,0,n) pre[i]=i;
dis[s]=0.0;
queue<int>q;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
REP(i,0,n){
if(dis[i]>dis[u]+G[u][i]){
dis[i]=dis[u]+G[u][i];
pre[i]=u;
if(!vis[i]){
vis[i]=1;
q.push(i);
}
}
}
}
} void print(int u)
{
if(pre[u]==u){
printf("%d",u+1);
}else{
print(pre[u]);
printf(" %d",u+1);
}
} int main()
{
int s,t;
while(~scanf("%d%d",&n,&m))
{
scanf("%d%d",&s,&t);
REP(i,0,m){
cin>>e[i].fr>>e[i].to>>e[i].r>>e[i].d;
--e[i].fr,--e[i].to;
}
sort(e,e+m);
kruskal(s-1,t-1);
dijkstra(s-1);
print(t-1);
printf("\n");
printf("%.1lf %.1lf\n",dis[t-1],ansr);
}
return 0;
}

  

UVA-10816 Travel in Desert (最小瓶颈最短路)的更多相关文章

  1. uva 10816 Travel in Desert(简单的好题~两种方法)

    题意: 给出 一个图 点与点之间的路径上有两个权值 路径长度和温度 要求在所走路径中的温度的最大值最小的前提下 走最短路径 解题思路1: 首先用 最小生成树 的方法走出 最小瓶颈路 .把在这期间用到的 ...

  2. 【UVA 11354】 Bond (最小瓶颈生成树、树上倍增)

    [题意] n个点m条边的图 q次询问 找到一条从s到t的一条边 使所有边的最大危险系数最小 InputThere will be at most 5 cases in the input file.T ...

  3. UVa 11354 邦德(最小瓶颈路+LCA)

    https://vjudge.net/problem/UVA-11354 题意: 有n个城市m条道路,每条道路有一个危险系数.先在有若干个询问,要求找到一条从s到t的路,使得途径所有边的最大危险系数最 ...

  4. 【UVA 10816】 Travel in Desert (最小瓶颈树+最短路)

    [题意] 有n个绿洲, m条道路,每条路上有一个温度,和一个路程长度,从绿洲s到绿洲t,求一条道路的最高温度尽量小, 如果有多条, 选一条总路程最短的. InputInput consists of ...

  5. 【UVA10816】Travel in Desert (最小瓶颈路+最短路)

    UVA10816 Travel in Desert 题目大意 沙漠中有一些道路,每个道路有一个温度和距离,要求s,t两点间的一条路径,满足温度最大值最小,并且长度最短 输入格式 输入包含多组数据. 每 ...

  6. 最小瓶颈路 Uva 534 Frogger

    说明:关于Uva的题目,可以在vjudge上做的,不用到Uva(那个极其慢的)网站去做. 最小瓶颈路:找u到v的一条路径满足最大边权值尽量小 先求最小生成树,然后u到v的路径在树上是唯一的,答案就是这 ...

  7. UVA 11354 Bond 邦德 (RMQ,最小瓶颈MST)

    题意: n个城市,m条路,每条路有个危险值,要使得从s走到t的危险值最小.回答q个询问,每个询问有s和t,要求输出从s到t最小的危险值.(5万个点,10万条边) 思路: 其实要求的是任意点对之间的最小 ...

  8. UVA 11354 Bond(最小瓶颈路+倍增)

    题意:问图上任意两点(u,v)之间的路径上,所经过的最大边权最小为多少? 求最小瓶颈路,既是求最小生成树.因为要处理多组询问,所以需要用倍增加速. 先处理出最小生成树,prim的时间复杂度为O(n*n ...

  9. 【uva 534】Frogger(图论--最小瓶颈路 模版题)

    题意:平面上有N个石头,给出坐标.一只青蛙从1号石头跳到2号石头,使路径上的最长便最短.输出这个值.(2≤N≤200) 解法:最小瓶颈树.而由于这题N比较小便可以用2种方法:1.最短路径中提到过的Fl ...

随机推荐

  1. Centos忘记root密码重置

    entos6.5忘记root密码重置 一,启动服务器按e键 二,按e键选择第二项 三,在ro root前输入single回车保存 四,回到前面一个界面按b键启动 不用密码即可启动输入passwd修改r ...

  2. Use of ‘const’ in Functions Return Values

    Use of 'Const' in Function Return Values 为什么要在函数的返回值类型中添加Const? 1.Features Of the possible combinati ...

  3. Python自动发布Image service的实现

    使用Python自动发布地图服务已经在上一篇博客中讲到,使用Python创建.sd服务定义文件,实现脚本自动发布ArcGIS服务,下面是利用Python自动发布Image service的实现. -- ...

  4. square-and-multiply algorithm

    https://en.wikipedia.org/wiki/Square-and-multiply_algorithm

  5. nginx详解之语法规则

    1.location [=|~|~*|^~] /uri/ { … } location  = / {   # 精确匹配 / ,主机名后面不能带任何字符串   [ configuration A ]  ...

  6. Day22 文件上传下载和javaMail

    day22总结 文件上传概述   1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢.   2 文件上传对页面的要求 上传文件的要求比较多,需要 ...

  7. 日志汇总:logging、logger

    目录 1.日志输出到文件 2.日志输出到屏幕 3.设置输出等级 4.设置多个日志输出对象 5.日志的配置 6.记录异常 7.设置日志输出样式 1.日志输出到文件basicConfig()提供了非常便捷 ...

  8. tcpdump-抓包工具-Linux

    环境:VMware-Workstation-12-Pro,Windows-10,CentOS-6.9-x86_64,Xshell5 基本介绍 tcpdump是Linux自带的抓包工具,可以详细看到计算 ...

  9. <option> 标签的 value 属性

    <html> <body> <form action="/example/html/form_action.asp" method="get ...

  10. Java游戏服务器成长之路——你好,Mongo

    关于mongo的思考 第一阶段的弱联网游戏已基本完成,截至今天下午,测试也基本差不多了,前端还有一些小bug需要优化,接下来会接入小米,360,百度,腾讯等平台,然后推广一波,年前公司还能赚一笔,而我 ...