题目描述

Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光。Z小镇附近共有N个景点(编号为1,2,3,…,N),这些景点被M条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路。也许是为了保护该地的旅游资源,Z小镇有个奇怪的规定,就是对于一条给定的公路Ri,任何在该公路上行驶的车辆速度必须为Vi。速度变化太快使得游客们很不舒服,因此从一个景点前往另一个景点的时候,大家都希望选择行使过程中最大速度和最小速度的比尽可能小的路线,也就是所谓最舒适的路线。

输入输出格式

输入格式:
第一行包含两个正整数,N和M。

接下来的M行每行包含三个正整数:x,y和v。表示景点x到景点y之间有一条双向公路,车辆必须以速度v在该公路上行驶。

最后一行包含两个正整数s,t,表示想知道从景点s到景点t最大最小速度比最小的路径。s和t不可能相同。

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

输入输出样例

输入样例#1:
4 2
1 2 1
3 4 2
1 4
输出样例#1:
IMPOSSIBLE

输入样例#2:
3 3
1 2 10
1 2 5
2 3 8
1 3
输出样例#2:
5/4

输入样例#3:
3 2
1 2 2
2 3 4
1 3
输出样例#3:
2

说明

【数据范围】

1<N≤500

1≤x,y≤N,0<v<30000,x≠y

0<M≤5000


题解

咋一看挺唬人的一道题(哎,图论总是我的痛……)
不过看看n、m这么小,可以想到把边权(Vi)从小到大排个序,从某条小边开始不断加边,直到s与t连通
如何判断是否连通呢——并查集
这样每次把“小边”往后推,再加边,s与t连通后边权差用最后加的那条边的边权-小边边权即可
由于并查集不支持删点,所以每次只能将小边往后推一个

这种想法很巧啊~


代码

#include<cstdio>
#include<iostream>
#include<algorithm>#define INF 30000005
using namespace std;const int N = 505;
const int M = 5005;struct edge{int u,v,len;bool operator < (const edge &x) const{return x.len>len;     }
}h[M];int fa[N];
int Getfa(int x){ return fa[x]==x?x:fa[x]=Getfa(fa[x]); }
void unit(int x,int y) { fa[Getfa(x)]=Getfa(y); }int n,m,s,t;int up,down=1;
double ans=INF;
int prime[5000],p[30005],num;
void Getprime(){for(int i=2;i<30005;i++) p[i]=1;for(int i=2;i<30005;i++){if(p[i]) prime[num++]=i;for(int j=0;j<num && (long long)prime[j]*i<30005;j++){p[prime[j]*i]=0;if(i%prime[j]==0) break;        }}
}int main()
{int i,j;scanf("%d%d",&n,&m);for(i=0;i<m;i++)scanf("%d%d%d",&h[i].u,&h[i].v,&h[i].len);scanf("%d%d",&s,&t);sort(h,h+m);for(i=0;i<m;i++){for(j=1;j<=n;j++) fa[j]=j;for(j=i;j<m;j++){unit(h[j].u,h[j].v);if(Getfa(s)==Getfa(t)) break;                 }if(Getfa(s)==Getfa(t) && ((double)h[j].len/h[i].len)<ans) {up=h[j].len; down=h[i].len;ans=((double)up/down);}}if(ans==INF) printf("IMPOSSIBLE\n");else if((int)ans*down==up) printf("%.0lf\n",ans);else {Getprime();for(i=0;i<num && prime[i]<down;i++)while(up%prime[i]==0 && down%prime[i]==0) up/=prime[i],down/=prime[i];    printf("%d/%d\n",up,down);}return 0;
}

转载于:https://www.cnblogs.com/lindalee/p/8111434.html

洛谷P2502:[HAOI2006]旅行相关推荐

  1. P2502 [HAOI2006]旅行

    P2502 [HAOI2006]旅行 有些问题光靠直觉是不靠谱的,必须有简单的证明,要么就考虑到所有情况. 这个题我想的是要么见最小生成树,要么建最大生成树,哎,我sb了 一种很简单的情况就能卡掉 在 ...

  2. 【洛谷】P1137旅行计划

    [洛谷]P1137旅行计划 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1至N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市 ...

  3. 洛谷——P2341 [HAOI2006]受欢迎的牛//POJ2186:Popular Cows

    P2341 [HAOI2006]受欢迎的牛/POJ2186:Popular Cows 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所 ...

  4. 洛谷P2341 [HAOI2006]受欢迎的牛 (Tarjan,SCC缩点)

    P2341 [HAOI2006]受欢迎的牛|[模板]强连通分量 https://www.luogu.org/problem/P2341 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就 ...

  5. 洛谷P2134 百日旅行

    P2134 百日旅行 题目背景 重要的不是去哪里,而是和你在一起.--小红 对小明和小红来说,2014年7月29日是一个美好的日子.这一天是他们相识100天的纪念日. (小明:小红,感谢你2场大考时默 ...

  6. 【洛谷_P1137】旅行计划

    旅行计划 题目描述 小明要去一个国家旅游.这个国家有#NN个城市,编号为11至NN,并且有MM条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制定 ...

  7. 洛谷P2503 [HAOI2006]均分数据(模拟退火)

    题目描述 已知N个正整数:A1.A2.--.An .今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小.均方差公式如下: 输入输出格式 输入格式: 输入文件data.in包括: 第一行 ...

  8. P2502 [HAOI2006]旅行 最小生成树

    思路:枚举边集,最小生成树 提交:1次 题解:(如思路) #include<cstdio> #include<iostream> #include<algorithm&g ...

  9. 2018.11.04 洛谷P1081 开车旅行(倍增)

    传送门 思路简单码量超凡? 感觉看完题大家应该都知道是倍增sbsbsb题了吧. 首先预处理出从每个点出发如果是AAA走到哪个点,如果是BBB走到哪个点. 然后利用刚刚预处理出的信息再预处理从每个点出发 ...

最新文章

  1. 浅谈千万级PV/IP规模高性能高并发网站架构
  2. 哈希表建立及冲突处理
  3. 施耐德电气:2016年数据中心的三大关注领域
  4. linux du命令使用:目录大小排序
  5. config kubectl_Kubernetes(k8s)中文文档 kubectl config set-context_Kubernetes中文社区
  6. 回文自动机:从入门到只会打板
  7. 鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法
  8. CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)
  9. private、public、protected、internal修饰符的访问权限
  10. MarkDown、Vim双剑合璧
  11. 怎么看电脑有没有蓝牙_怎么选购电脑音响?挑选到性价比高的电脑桌面音箱,看完这篇推荐指南就懂了!...
  12. GPUGraphicsGame tools
  13. 影视剪辑,PR剪辑软件两个转场教程
  14. LODOP属性和方法
  15. Load and Display an Image - 加载并显示图像
  16. redis热key卡槽节点分配算法
  17. 乐队设备--功放的学习和使用
  18. $.each()和$().each
  19. java-初识大前端Node.js、ES6、Npm、Babel、模块化规范、WebPack、Vue-element-admin本地安装问题及解决、Git安装及配置、uni-app
  20. acer台式电脑怎么重装系统_acer电脑U盘重装操作系统图文教程

热门文章

  1. 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别
  2. spark 写tidb_优秀的数据工程师,怎么用Spark在TiDB上做OLAP分析
  3. Qt 并行计算圆周率示例
  4. 系统优化方法与智能优化算法
  5. [CODEVS 1087] 麦森数
  6. Ubuntu、Windows双系统为Ubuntu增加磁盘空间
  7. 迷宫pascal程序
  8. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
  9. asp向不同的用户发送信息_ASP.NET Core 中的那些认证中间件及一些重要知识点
  10. JavaScript 数组拼接打印_巧用控制台,提升JavaScript调试性能