测试结果2: 选手程序无输出
测试结果3: 选手程序无输出
测试结果4: 选手程序无输出
测试结果5: 选手程序无输出
测试结果6: 选手程序无输出
测试结果7: 选手程序无输出
测试结果8: 选手程序无输出
测试结果9: 选手程序无输出
测试结果10: 选手程序无输出
var d:array[1..30000,1..30000] of integer;v:array[1..3000] of boolean;
n:integer;m:longint;
procedure init;
var i:longint;a,b,c:integer;
begin
readln(n,m);
for i:=1 to m do
begin
readln(a,b,c);
d[a,b]:=c;
end;
end;
procedure dis;
var i,j,p:integer;max:integer;
begin
for i:=1 to n do
begin
max:=maxint;
for j:=2 to n do
if (max>d[i,j]) and (d[i,j]<>0) and not(v[i]) then
begin
max:=d[i,j];
p:=j;
end;
v[p]:=true;
for j:=2 to n do
if (d[p,j]<>0) and (d[1,p]<>0) then
if (d[1,j]>d[1,p]+d[p,j]) or (d[1,j]=0) then
d[1,j]:=d[1,p]+d[p,j];
end;
end;
begin
init;
dis;
write(d[1,n]);
end.
下面是核心代码:
procedure relax (a,b,d:longint);
var
x:longint;
begin
x:=far[a]+d;
if x<far [b] then
begin
far[b]:=x;
flag:=false;
end;
end;
repeat
flag:=true;
for i:=1 to 2*m do
relax (ipt[i].x,ipt[i].y,ipt[i].di);
until flag;