传送门

Description

给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000)。给你两个顶点S和T,求
一条路径,使得路径上最大边和最小边的比值最小。如果S和T之间没有路径,输出”IMPOSSIBLE”,否则输出这个
比值,如果需要,表示成一个既约分数。 备注: 两个顶点之间可能有多条路径。

Input

第一行包含两个正整数,N和M。下来的M行每行包含三个正整数:x,y和v。表示景点x到景点y之间有一条双向公路
,车辆必须以速度v在该公路上行驶。最后一行包含两个正整数s,t,表示想知道从景点s到景点t最大最小速度比
最小的路径。s和t不可能相同。
1<N<=500,1<=x,y<=N,0<v<30000,0<M<=5000

Output

如果景点s到景点t没有路径,输出“IMPOSSIBLE”。否则输出一个数,表示最小的速度比。
如果需要,输出一个既约分数。

Sample Input

【样例输入1】

4 2

1 2 1

3 4 2

1 4

【样例输入2】

3 3

1 2 10

1 2 5

2 3 8

1 3

【样例输入3】

3 2

1 2 2

2 3 4

1 3

Sample Output

【样例输出1】

IMPOSSIBLE

【样例输出2】

5/4

【样例输出3】

2

Solution

没什么明显的提示qwq
题目是要找两条符合条件边求比值,发现m是5000的可以先枚举其中一条边再\(O(m)\)地找另一条边就能行
这个题是要在s和t联通的情况下,找到最小比值,那么如果确定一条最小边,只需要找到最大边最小的的方案使st连通其中的最大边就是当前情况的最优边
于是就想到了kruskal的方法,直接套上去发现所有要求就都满足了ヽ( ̄▽ ̄)ノ

Code

//By Menteur_Hxy
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define F(i,a,b) for(register int i=(a);i<=(b);i++)
using namespace std;int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f; c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}const int N=510,M=5010;
int n,m,s,t,amx,ami;
int fa[N];
double ans=2333333333.0;
struct eds{int fr,to,w;}ed[M];int gcd(int a,int b) {return !b?a:gcd(b,a%b);}
int getf(int x) {return fa[x]==x?x:fa[x]=getf(fa[x]);}
bool cmp(eds x,eds y) {return x.w<y.w;}int main() {n=read(),m=read();F(i,1,m) {int a=read(),b=read(),c=read();ed[i]=(eds){a,b,c};}s=read(),t=read();sort(ed+1,ed+1+m,cmp);
//  cout<<endl;F(i,1,m) {F(j,1,n) fa[j]=j;int mi=ed[i].w;F(j,i,m) {int fu=getf(ed[j].fr),fv=getf(ed[j].to);
//          cout<<fu<<" "<<fv<<endl;if(fu!=fv) fa[fu]=fv;
//          cout<<getf(s)<<" "<<getf(t)<<endl;
//          cout<<endl;if(getf(s)==getf(t)) {int mx=ed[j].w;double res=(double)mx/mi;
//              cout<<res<<endl;if(res<ans) amx=mx,ami=mi,ans=res;break;}}}if(ans==2333333333.0) puts("IMPOSSIBLE");else if(amx%ami==0) printf("%d",amx/ami);else {int d=gcd(amx,ami);printf("%d/%d",amx/d,ami/d);}return 0;
}

转载于:https://www.cnblogs.com/Menteur-Hxy/p/9371979.html

[bzoj1050 HAOI2006] 旅行comf (kruskal)相关推荐

  1. [BZOJ1050] [HAOI2006] 旅行comf (Kruskal, LCT)

    Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T ,求一条路径,使得路径上最 ...

  2. bzoj1050: [HAOI2006]旅行comf

    题面在这里 题意: 给一个图,每条边有边权. 给一个s和t,如果s和t之间没有路径输出IMPOSSIBLE,否则输出路径上最大边和最小边的比值的最小值. 做法: 你把边从小到大排序.那么对于一个最小值 ...

  3. BZOJ1050 [HAOI2006]旅行comf(Kruskal算法)

    SPFA是错误的:局部最优不能保证全局最优,因为要求的是比例最小,与路的长短无直接关系 可以设计m^2的算法: 先将边按长度排序,然后每次枚举最小边的长度w[i]作限定,依次加入更大的边, 当加到某条 ...

  4. bzoj1050 [HAOI2006]旅行comf

    题目 枚举最小边,在用kruskal方法来让S与T,联通,这样比值就最优了.. #include<bits/stdc++.h> using namespace std; int f[501 ...

  5. BZOJ1050 HAOI2006 旅行comf 生成树+枚举

    题意:给订一张无向图,求一条S到T的路径,使得路径上的最大边权与最小边权的比值最小 题解:将边由小到大排序,暴力枚举最小边,然后借鉴Kruskal的思想,由小到大加入每一条大于初始边的边,检验S与T是 ...

  6. BZOJ1050 [HAOI2006]旅行comf

    题目描述: 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径上最大边和最小边 ...

  7. bzoj1050 [HAOI2006]旅行comf(并查集)

    要求路径上最大边与最小边比值的最小值.我们知道,如果固定最小值,最大值越接近最小值,他们的比值越小.因此我们可以采用类似bzoj3454的方法,把所有边从小到大排序,枚举最小值,再枚举最大值,用并查集 ...

  8. BZOJ1050 [HAOI2006]旅行comf (并查集)

    题意分析 一开始想用最短路的方法维护,然后更新信息.失败了. 想了半天,发现跟lrj书上面的一道题很像,看边才5000,暴力可做. 对边排序后枚举sta,直到发现起点和重点在一个联通块里面,统计答案即 ...

  9. 【bzoj1050】[HAOI2006]旅行comf

    1050: [HAOI2006]旅行comf Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2813  Solved: 1534 [Submit][ ...

最新文章

  1. 有关oracle数据库中的日期显示问题
  2. mysql select语句最简_10个mysql中select语句的简单用法
  3. 编写unit test以及自动化测试WebDriver
  4. mysql数据记录更新版本问题_MySQL版本升级遇到的问题小结
  5. Ubuntu常用安装源
  6. cat查看tomcat日志 linux_linux怎么使用cat命令查看文件? linux中cat命令的使用方法
  7. ftb测试软件,EXFO推出FTB-2光纤测试平台
  8. 实战_23_高可用负载均衡集群的实现(Mycat+ZK +HAProxy + Keepalived)
  9. wordcount C
  10. 火绒规则 禁止所有软件的安装_十大机械设计软件对比,附所有软件安装资料...
  11. 解决eclipse中mybatis的xml配置文件无代码提示问题
  12. 2021高考成绩河北查询时间,2021年高考成绩什么时候出来-2021高考成绩公布时间...
  13. 北京朝阳行政区划(朝阳区街道行政区划) 用于shp数据转为geojson格式作为ECharts地图
  14. python遍历json数据方法
  15. QQ向陌生人聊天的autoit脚本
  16. 第九天:操作符详解(一)与扫雷游戏
  17. Power BI Desktop 微软官方入门教程
  18. 宝塔下 nginx 支持图片放缩
  19. python可以构建sem模型_Python Pandas Series.sem()用法及代码示例
  20. C语言中extern用法详解

热门文章

  1. python默认参数只被解释一次_深入讲解Python函数中参数的使用及默认参数的陷阱...
  2. matlab vision工具箱使用手册,matlab-Computer Vision System ToolBox的系统对象使用
  3. 升降压斩波电路matlab,升降压直流斩波电路及matlab仿真.doc
  4. 自学前端的高效学习路线.avi
  5. 程序语言基础:解释程序基本原理笔记
  6. 7个免费的Linux FTP客户端工具
  7. python一般学多久可以考试_为何Python适合初学者 一般Python要学习多久
  8. 微软登录界面加载不出_微软要硬了,做出这个目前最好用的浏览器
  9. mysql2014授权设置_mysql权限管理(2014-09-15)
  10. mysql 5.7.23要钱吗_最新mysql 5.7.23安装配置图文教程