[codevs1001]舒适的路线

试题描述

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

输入

第一行包含两个正整数,N和M。
接下来的M行每行包含三个正整数:x,y和v(1≤x,y≤N,0 最后一行包含两个正整数s,t,表示想知道从景点s到景点t最大最小速度比最小的路径。s和t不可能相同。

输出

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

输入示例

  1.  

输出示例

  1. /

数据规模及约定

N(1<N≤500)

M(0<M≤5000)

Vi在int范围内

题解

把 m 条边按照 V 值从小到大排序,然后 O(n2) 扫一遍用并查集维护一下 s, t 间的连通性。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cctype>
  6. #include <algorithm>
  7. using namespace std;
  8.  
  9. int read() {
  10. int x = 0, f = 1; char c = getchar();
  11. while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
  12. while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
  13. return x * f;
  14. }
  15.  
  16. #define maxn 510
  17. #define maxm 5010
  18. #define LL long long
  19. int n, m, s, t;
  20. struct Edge {
  21. int u, v, d;
  22. Edge() {}
  23. Edge(int _1, int _2, int _3): u(_1), v(_2), d(_3) {}
  24. bool operator < (const Edge& t) const { return d < t.d; }
  25. } es[maxm];
  26.  
  27. LL gcd(LL a, LL b) { return !b ? a : gcd(b, a % b); }
  28. struct Fra {
  29. LL a, b;
  30. Fra() {}
  31. Fra(LL _, LL __): a(_), b(__) {}
  32. void maintain() {
  33. if(a < 0) return ;
  34. LL d = gcd(a, b);
  35. a /= d; b /= d;
  36. return ;
  37. }
  38. bool operator < (const Fra& t) const { return a * t.b < b * t.a; }
  39. } ;
  40.  
  41. int fa[maxn];
  42. int findset(int x) { return x == fa[x] ? x : fa[x] = findset(fa[x]); }
  43.  
  44. int main() {
  45. n = read(); m = read();
  46. for(int i = 1; i <= m; i++) {
  47. int a = read(), b = read(), c = read();
  48. es[i] = Edge(a, b, c);
  49. }
  50. s = read(); t = read();
  51.  
  52. Fra ans(-1, -1);
  53. sort(es + 1, es + m + 1);
  54. for(int i = 1; i <= m; i++) {
  55. for(int j = 1; j <= n; j++) fa[j] = j;
  56. for(int j = i; j <= m; j++) {
  57. Edge& e = es[j];
  58. int u = findset(e.u), v = findset(e.v);
  59. if(u != v) fa[v] = u;
  60. if(findset(s) == findset(t)) {
  61. if(ans.a < 0) ans = Fra(e.d, es[i].d);
  62. ans = min(ans, Fra(e.d, es[i].d));
  63. break;
  64. }
  65. }
  66. }
  67.  
  68. if(ans.a < 0) return puts("IMPOSSIBLE"), 0;
  69. ans.maintain();
  70. if(ans.b != 1) printf("%lld/%lld\n", ans.a, ans.b);
  71. else printf("%lld\n", ans.a);
  72.  
  73. return 0;
  74. }

[codevs1001]舒适的路线的更多相关文章

  1. [题解]codevs1001 舒适的路线

    h3 { font-family: Consolas; color: #339966 } .math { font-family: Consolas; color: gray } 题目描述 Descr ...

  2. codevs1001 舒适的路线 - 贪心 - 并查集

    题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N(1<N≤500)个景点(编号为1,2,3,…,N),这些景点被M(0<M≤ ...

  3. CODEVS1001 舒适的路线 (并查集)

    对所有边从大到小排序,枚举最大边,O(m)验证,用并查集维护图是否联通. program CODEVS1001; ; maxn=; INF=; type arr=record u,v,w:int64; ...

  4. 【Kruskal】舒适的路线

    [codevs1001]舒适的路线 题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N(1<N≤500)个景点(编号为1,2,3,… ...

  5. 求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线

    codevs 1001 舒适的路线 2006年  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Z小镇是一个景色宜人 ...

  6. codevs 1001 舒适的路线(Kruskal)

    传送门 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N(1<N≤500)个景点(编号为1,2,3,…,N),这些景点被M(0<M≤5 ...

  7. AC日记——舒适的路线 codevs 1001 (并查集+乱搞)

    1001 舒适的路线 2006年  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description Z小镇是 ...

  8. Codevs 1001 舒适的路线 2006年 NOIP全国联赛提高组

    1001 舒适的路线 2006年 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观 ...

  9. codevs 1001 舒适的路线 (并查集)

    题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光. Z小镇附近共有 N(<N≤)个景点(编号为1,,,…,N),这些景点被M(<M≤)条道路连 ...

随机推荐

  1. 《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制

    内容 1.高级语言的运行机制 2.Java 语言的运行机制 1.高级语言的运行机制 高级语言主要分为编译型语言和解释型语言两类. 编译型语言是指使用专门的编译器.针对特定平台(操作系统)将高级语言源代 ...

  2. EasyUi 方法传递多个参数值得方法

    1.项目中需要传递多个参数值 function actionFtt(value, row, index) { //传递查询需要的参数 var customerId = row.customerId;/ ...

  3. spark 加载文件

    spark 加载文件 textFile的参数是一个path,这个path可以是: 1. 一个文件路径,这时候只装载指定的文件 2. 一个目录路径,这时候只装载指定目录下面的所有文件(不包括子目录下面的 ...

  4. JavaWeb学习笔记——Ajax

  5. URL中“#” “?” &“”号的作用

    URL中"#" "?" &""号的作用   阅读目录 1. # 2. ? 3. & 回到顶部 1. # 10年9月,twit ...

  6. mysql 查询表结构 查询索引

    首先进入到mysql里 show databases; 选择数据库 use xxxcms; 查询数据库下的表结构 show create table 表名; 这样看着不太好可以后面加\G show c ...

  7. centos 7.0 nginx 1.7.9 安装过程

    系统用的是centos 7.0最小化安装 我现在安装完了 写一下步骤 还没完全搞懂 首先安装GCC [root@localhost ~]# yum install -y gcc gcc-c++ 已加载 ...

  8. 对AccessViolationException的一些总结

    引言 开发Winform程序时,应用程序出现了异常,整个应用程序崩溃自动退出了.在断点调试后,发现异常是AccessViolationException.所以对周围的语句加上了异常的处理机制.但是接下 ...

  9. [CentOS7]安装mysql遇到的问题

    摘要 在安装mysql的时候,遇到了一些问题,这里列出所遇到的问题. yum list mysql-server 在使用命令yum list mysql-server安装mysql的时候,遇到如图所示 ...

  10. eclipse将引用了第三方jar包的java项目打成jar包

    今天用java开发了一个项目,想要打成jar包,并在linux环境下运行.但是运行时引用的第三方jar包却显示classNotFind错误. 于是查了一下解决办法,在此贴出来,方便以后查阅. 用Ecl ...