P1339 [USACO09OCT]热浪Heat Wave

来源:互联网 发布:中拍协网络拍卖平台 编辑:程序博客网 时间:2024/04/29 20:36

题目描述

给一个地图,有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.
1 0
原创粉丝点击