首页 > 学院 > 开发设计 > 正文

P1339 [USACO09OCT]热浪Heat Wave

2019-11-06 07:58:12
字体:
来源:转载
供稿:网友

题目描述

给一个地图,有C (1 <= C <= 6,200)条直接连接2个城镇的道路。每条道路由道路的起点Rs,终点Re ,且每一条道路是双向的,和花费组成。求从起始的城镇Ts 到终点的城镇Te最小的总费用。

样例输入

7 11 5 42 4 21 4 37 2 23 4 35 7 57 3 36 1 16 3 42 4 35 6 37 2 1

样例输出

7

思路

O(n^2)Dijkstra求单源最短路,把所有的顶点分为已找到最短路(s)和没有找到最短路(t)的两个集合,将顶点依次加入s中,对新加入的点进行松弛。d[u]+a[u,i]<d[i]var d:array[1..7000] of longint; a:array[1..3000,1..3000] of longint; mark:array[1..7000] of boolean; n,b,c,e:longint;PRocedure dij(v0:integer);var i,j,u,min:integer;begin fillchar(mark,sizeof(mark),false); mark[v0]:=true; for i:=1 to n do d[i]:=a[v0,i]; repeat u:=0;min:=maxint; for i:=1 to n do if (not mark[i])and(d[i]<min) then begin u:=i; min:=d[i]; end; if u<>0 then begin mark[u]:=true; for i:=1 to n do if (not mark[i])and(d[u]+a[u,i]<d[i])then begin d[i]:=d[u]+a[u,i]; end; end; until u=0;end;procedure init;var i,x,y,z:longint;begin readln(n,b,c,e); for i:=1 to b do begin readln(x,y,z); a[x,y]:=z; a[y,x]:=z; end;end;begin fillchar(a,sizeof(a),$7f); init; dij(c); writeln(d[e]);end.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表