1001 舒适的路线

题目描述 Description

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

输入描述 Input Description

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

输出描述 Output Description

如果景点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

数据范围及提示 Data Size & Hint

N(1<N≤500)

M(0<M≤5000)

Vi在int范围内

解题思路

好吧,我承认我看了题解,这个题是一个并查集的变形,把价值由小到大排序,之后,枚举每一条边,然后把它当做最大值,再从大到小枚举比该边小的边,同时判断起点和终点是否联通,联通就确定最小值,更新ans。

但是刚开始做的时候我忘记更新ans了,汗汗汗!

 1 program saft;
 2 type aa=record
 3 l,r,v:Longint
 4 end;
 5 var a:array[0..5000] of aa;
 6     n,m,w,i,j,max,min,maxx,minn,st,ed:longint;
 7     ans:real;
 8     f:array[1..500] of longint;
 9     procedure sort(l,r: longint);
10       var
11          i,j,x,y: longint;
12       begin
13          i:=l;
14          j:=r;
15          x:=a[(l+r) div 2].v;
16          repeat
17            while a[i].v<x do
18             inc(i);
19            while x<a[j].v do
20             dec(j);
21            if not(i>j) then
22              begin
23                 a[0]:=a[i];
24                 a[i]:=a[j];
25                 a[j]:=a[0];
26                 inc(i);
27                 j:=j-1;
28              end;
29          until i>j;
30          if l<j then
31            sort(l,j);
32          if i<r then
33            sort(i,r);
34       end;
35
36 function root(x:longint):Longint;
37 begin
38     if f[x]=x then exit(x);
39     f[x]:=root(f[x]);
40     exit(f[x]);
41 end;
42
43 function gcd(x,y:Longint):Longint;
44 begin
45     if x mod y=0 then exit(y);
46     exit(gcd(y,x mod y));
47 end;
48
49 begin
50     read(n,m);
51
52     for i:=1 to m do
53     read(a[i].l,a[i].r,a[i].v);
54     read(st,ed);
55     sort(1,m);
56     //min:=1;
57     max:=maxLongint;
58     ans:=maxlongint div 2;
59     for i:=2 to m do
60     begin
61         max:=a[i].v;
62
63         for j:=1 to n do f[j]:=j;
64         f[root(a[i].l)]:=root(a[i].r);
65         for j:=i downto 1 do
66         begin
67             if (root(st)<>root(ed)) and (root(a[j].l)<>root(a[j].r)) then
68             f[root(a[j].l)]:=root(a[j].r);
69             if root(st)=root(ed) then min:=a[j].v;
70             if (root(st)=root(ed))and (max/ min<ans) then
71             begin
72                 minn:=min;
73                 maxx:=max;
74                 ans:=max/min;
75             end;
76          if root(st)=root(ed) then break;
77         end;
78     end;
79     if min=0 then
80     begin
81         writeln(‘IMPOSSIBLE‘);
82         halt;
83     end;
84     w:=gcd(maxx,minn);
85     if minn div w=1 then writeln(maxx div w) else
86     writeln(maxx div w,‘/‘,minn div w);
87 end.
时间: 2024-08-08 21:50:13

1001 舒适的路线的相关文章

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

codevs 1001 舒适的路线 2006年 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N(1<N≤500)个景点(编号为1,2,3,…,N),这些景点被M(0<M≤5000)条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也许是为了保护该地的旅游资源,Z小镇有个奇怪的规定,就是对于一条给定的公路Ri,任何在该公路上行驶的车

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

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

codevs 1001 舒适的路线

我到底什么时候才能学会不看题解把题写出来.... 把所有的边从小到大排序,for一遍把当前边作为最大值,然后倒着for,更新答案即可.若不能更新答案则有IMPOSSIBLE. 这是连续第二道没做出来的并查集了. 某神犇说用spfa比较快...没验证过,也不想验证. #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define

枚举+并查集 之 CODE[VS] 1001 舒适的路线 2006年

/* 枚举所有情况,通过并查集判断在当前情况下,是否包含起始和终止点, 若包含,则需判断是否在当前情况下,最大速度和最小速度的比更小, 若是,则更新最大速度和最小速度. 最后枚举过所有情况后,即获得答案. */ 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstddef> 5 #include <iterator> 6 #include &l

codevs 1001 舒适的线路 kruskal/gcd

舒适的线路 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1001/ Description Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光. Z小镇附近共有N(1<N≤500)个景点(编号为 1,2,3,…,N),这些景点被M(0<M≤5000)条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也许是为了保护该地的旅 游资源,Z小镇有个奇怪的规定,就是对于一条给定的

舒适的路线

[题目描述] Z小镇附近共有N(1 < N ≤ 500)个景点(编号为1.2.3.······.N),这些景点被M(0 < M ≤ 5000)条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.Z小镇有个奇怪的规定,就是对于一条给定的公路Ri,任何在该公路上行驶的车辆速度必须为Vi.频繁的改变速度使得游客们很不舒服,因此大家从一个景点前往另一个景点的时候,都希望选择行使过程中最大速度和最小速度的比尽可能小的路线,也就是所谓最舒适的路线. [输入描述] 第一行包含两个正整数,N和M:接

【Kruskal】舒适的路线

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

codevs 舒适的路线(Kruskal)

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

nyoj 711 最舒适的路线

最舒适的路线 时间限制:5000 ms  |  内存限制:65535 KB 难度:5 描述 异形卵潜伏在某区域的一个神经网络中.其网络共有N个神经元(编号为1,2,3,-,N),这些神经元由M条通道连接着.两个神经元之间可能有多条通道.异形卵可以在这些通道上来回游动,但在神经网络中任一条通道的游动速度必须是一定的.当然异形卵不希望从一条通道游动到另一条通道速度变化太大,否则它会很不舒服. 现在异形卵聚居在神经元S点,想游动到神经元T点.它希望选择一条游动过程中通道最大速度与最小速度比尽可能小的路