比赛 |
20121107 |
评测结果 |
RRRRR |
题目名称 |
最难的任务 |
最终得分 |
0 |
用户昵称 |
馒头 |
运行时间 |
0.001 s |
代码语言 |
Pascal |
内存使用 |
0.58 MiB |
提交时间 |
2012-11-07 09:43:24 |
显示代码纯文本
program cogsp1254;
const max=50000;
var q:array[1..max] of longint;
b:array[1..20000,1..3] of longint;
d,a:array[1..200] of longint;
mark:array[1..200] of boolean;
t,l,z,n,m,i,head,tail,u,v,w,s,k,now:longint;
begin
readln(t);
for l:=1 to t do begin
fillchar(b,sizeof(b),0);
fillchar(a,sizeof(a),0);
z:=0;
readln(n,m);
for i:=1 to m do begin
readln(u,v,w);
inc(z);b[z,1]:=v;b[z,2]:=w;b[z,3]:=a[u];a[u]:=z;
inc(z);b[z,1]:=u;b[z,2]:=w;b[z,3]:=a[v];a[v]:=z;
end;
head:=1;tail:=1;q[1]:=1;
fillchar(mark,sizeof(mark),false);
for i:=2 to n do d[i]:=maxlongint;
mark[1]:=true;
while head>=tail do begin
k:=q[tail];s:=a[k];
tail:=tail mod max+1;
while s<>0 do begin
now:=b[s,1];
if d[now]>d[k]+b[s,2] then begin
d[now]:=d[k]+b[s,2];
if not mark[now] then begin
head:=head mod max+1;
q[head]:=now;
end;
end;
s:=b[s,3];
end;
mark[k]:=false;
end;
if d[n]=maxlongint then writeln(-1)
else writeln(d[n]);
end;
end.