SSL2661 廉价最短路径(floyd)
来源:互联网 发布:书店网络推广 编辑:程序博客网 时间:2024/05/29 18:00
廉价最短路径
Description
图是由一组顶点和一组边组成的。一条边连接两个顶点。例如,图1表示了一个有4个顶点V、5条边的图。图中,每条边e是有方向的,方向从起点到终点,并且每条边都有价值。用整数0,1,…,m-1可以表示一个有m个顶点的图。
图1 图2
一条路径连接了一个点Vi和另一个点Vj,其方向与经过的一系列边的方向一致。路径的长度是途经边的条数,路径的费用是边价值的总和。对于一个给定的图,你的任务是在所有最短路径中,找出需要最少费用的连接V0和V1的路径。一个需要最少费用的最短路径称之为廉价最短路径。
让我们重新考虑图1,从0到1的最短路径是只含一条边的路径0→1,费用是10。当然,还有更便宜的路:0→2→1和 0→3→1,但是它们比第一条路径长(有2条边)。所以,0→1是廉价最短路径。
看一下另一个例子,图2,它有2条最短路径,其长度是2,路径0→3→1(费用=4)比路径0→2→1(费用=5)花费少。还用另一条路径0→2→3→1(费用=3),虽然便宜但是很长。所以,廉价最短路径是0→3→1。
Input
输入文件第一行有两个整数m和n,用一个空格隔开,其中,m是顶点数,而n是边数。接下来的n行给出所有的边及其价值,每行有3个整数(相邻两个整数间有一个空格),表示起点,终点和边的价值。顶点最多有100个,编号在0到99之间。边最多有1000条,其价值在0到2^15-1之间。
Output
输出文件仅有一行包含一个整数,即V0→V1的廉价最短路径的费用。当出现有多个廉价最短路径的情况时,它们的费用是一样的。
Sample Input
4 50 2 20 3 20 1 102 1 23 1 2
Sample Output
10
分析:给每条边加一个足够大的max值然后跑一次最短路就行了,至于为什么自己模拟一下就知道了。
代码
const maxn=101;var a:array[0..maxn,0..maxn] of longint; i,j,k,x,y,z,n,m:longint;begin assign(input,'paths.in');reset(input); assign(output,'paths.out');rewrite(output); readln(m,n); for i:=0 to m do for j:=0 to m do a[i,j]:=maxlongint div 3; for i:=1 to n do begin readln(x,y,z); a[x,y]:=z+123456; end; for k:=0 to m-1 do for i:=0 to m-1 do for j:=0 to m-1 do if (i<>k) and (i<>j) and (k<>j) then if a[i,k]+a[k,j]<a[i,j] then a[i,j]:=a[i,k]+a[k,j]; writeln(a[0,1] mod 123456); close(input);close(output);end.
0 0
- SSL2661 廉价最短路径(floyd)
- Floyd 最短路径
- Floyd最短路径
- 最短路径Floyd
- 最短路径---Floyd
- 【SSLGZ 2661】廉价最短路径
- Floyd最短路径算法
- joj1198Risk (Floyd 最短路径)
- 最短路径(Floyd算法)
- 最短路径 floyd算法
- 图论 最短路径floyd
- 最短路径--Floyd算法
- Floyd最短路径算法
- Floyd最短路径算法
- 最短路径Floyd算法
- 最短路径 Floyd算法
- Floyd最短路径算法
- 最短路径floyd算法
- express中间件body-parser实现拿到post请求的数据
- oj 1919 两数组最短距离
- ofbiz 更换数据库的配置
- HDU 1401 Solitaire(bfs)
- linux http配置
- SSL2661 廉价最短路径(floyd)
- bzoj2741: 【FOTILE模拟赛】L
- MQ的入门指南
- Redis之hashes类型及操作
- Linux内核学习总结
- Android百度地图开发一学习历程(一)
- 最近心情真的是烦到爆
- 【JZOJ5081】【GDSOI2017第三轮模拟】Travel Plan
- js事件详解