旅行 (Standard IO)
2016-08-12 15:02
351 查看
Description
Z 小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光。Z 小镇附近共有N 个景点(编号为1,2,3,…,N),这些景点被M 条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路。也许是为了保护该地的旅游资源,Z 小镇有个奇怪的规定,就是对于一条给定的公路Ri,任何在该公路上行驶的车辆速度必须为Vi。
速度变化太快使得游客们很不舒服,因此从一个景点前往另一个景点的时候,大家都希望选择行使过程中最大速度和最小速度的比尽可能小的路线,也就是所谓最舒适的路线。
Input
第一行包含两个正整数,N 和M。
接下来的M 行每行包含三个正整数:x,y 和v。表示景点x 到景点y 之间有一条双向公路,车辆必须以速度v 在该公路上行驶。
最后一行包含两个正整数s,t,表示想知道从景点s 到景点t 最大最小速度比最小的路径。s 和t 不可能相同。
Output
如果景点s 到景点t 没有路径,输出“IMPOSSIBLE”。否则输出一个数,表示最小的速度比。如果需要,输出一个既约分数。
题解
由于改画风了,本猪有点不习惯啊。为了广大群众着想,就改吧。不过有条件,这次题解就日后补充。
代码
Z 小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光。Z 小镇附近共有N 个景点(编号为1,2,3,…,N),这些景点被M 条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路。也许是为了保护该地的旅游资源,Z 小镇有个奇怪的规定,就是对于一条给定的公路Ri,任何在该公路上行驶的车辆速度必须为Vi。
速度变化太快使得游客们很不舒服,因此从一个景点前往另一个景点的时候,大家都希望选择行使过程中最大速度和最小速度的比尽可能小的路线,也就是所谓最舒适的路线。
Input
第一行包含两个正整数,N 和M。
接下来的M 行每行包含三个正整数:x,y 和v。表示景点x 到景点y 之间有一条双向公路,车辆必须以速度v 在该公路上行驶。
最后一行包含两个正整数s,t,表示想知道从景点s 到景点t 最大最小速度比最小的路径。s 和t 不可能相同。
Output
如果景点s 到景点t 没有路径,输出“IMPOSSIBLE”。否则输出一个数,表示最小的速度比。如果需要,输出一个既约分数。
题解
由于改画风了,本猪有点不习惯啊。为了广大群众着想,就改吧。不过有条件,这次题解就日后补充。
代码
var n,m,q,z,xt,yt,boo:longint; fa:array[0..5001]of longint; x,y,w:array[0..5001]of longint; procedure qsort(l,r:longint); var i,j,t,m:longint; begin i:=l; j:=r; m:=w[random(r-l)+l]; repeat while w[i]>m do inc(i); while w[j]<m do dec(j); if i<=j then begin t:=x[i]; x[i]:=x[j]; x[j]:=t; t:=y[i]; y[i]:=y[j]; y[j]:=t; t:=w[i]; w[i]:=w[j]; w[j]:=t; inc(i); dec(j); end; until i>j; if i<r then qsort(i,r); if j>l then qsort(l,j); end; function find(x:longint):longint; begin if fa[x]=x then exit(x); fa[x]:=find(fa[x]); exit(fa[x]); end; procedure trymain(tk:longint); var i:longint; begin for i:=1 to n do fa[i]:=i; for i:=tk to m do begin fa[find(x[i])]:=find(y[i]); if find(q)=find(z) then begin inc(boo); if boo=1 then begin xt:=w[tk]; yt:=w[i]; end; if (w[tk]/w[i])<(xt/yt) then begin xt:=w[tk]; yt:=w[i]; end; end; end; end; function gcd(o,p:longint):longint; begin if p=0 then exit(o); exit(gcd(p,o mod p)); end; procedure print; var o:longint; begin if (xt mod yt)=0 then begin write(xt div yt); exit; end; o:=gcd(xt,yt); write(xt div o,'/',yt div o); end; procedure main; var i:longint; begin for i:=1 to m do trymain(i); if boo=0 then write('IMPOSSIBLE') else print; end; procedure init; var i:longint; begin readln(n,m); for i:=1 to m do readln(x[i],y[i],w[i]); readln(q,z); end; begin randomize; init; qsort(1,m); main; end.
相关文章推荐
- 旅行 (Standard IO)
- 2569. 【NOIP2011模拟9.17】旅行 (Standard IO)
- 【NOIP2011模拟9.3】旅行 (Standard IO)
- 【2012.03.09普及组】旅行 (Standard IO)
- jzoj3053. 【NOIP2012模拟10.25】旅行 (Standard IO)
- 旅行 (Standard IO)
- 竞赛排名 (Standard IO)
- 回家 (Standard IO)
- 1254. 【USACO题库】1.5.2 Prime Palindromes回文质数 (Standard IO)
- 麻将 (Standard IO)
- Standard IO---产生数(CCF 1126)
- Standard IO-----数的划分问题(三)(CCF 1187)
- 1148. 全排列 (Standard IO)
- JZOJ 1349. 最大公约数 (Standard IO)
- JZOJ 5257. 小X的佛光 (Standard IO)
- 【NOIP提高组模拟A组8.15】膜法师 (Standard IO)
- jzoj P2203 遗忘口令 (Standard IO)
- 使用standard IO(libc)复制文件
- 【NOIP2014模拟9.9】逆光 (Standard IO)
- 绕圈跑 (Standard IO)