比赛 |
20121107 |
评测结果 |
AAAAA |
题目名称 |
最难的任务 |
最终得分 |
100 |
用户昵称 |
剑舞江南 |
运行时间 |
0.144 s |
代码语言 |
Pascal |
内存使用 |
1.92 MiB |
提交时间 |
2012-11-07 08:46:54 |
显示代码纯文本
Program PP1;
Var qi,mo,zh:array[1..20000]of longint;
f,dist:array[1..210]of longint;
q:array[1..400000]of longint;
t:array[1..210]of boolean;
w,l,n,m,x,y,z,head,tail,xx,i:longint;
Procedure qsort(s,t:longint);
var i,j,mid,temp:longint;
begin
i:=s; j:=t; mid:=qi[(s+t)div 2];
while i<=j do
begin
while qi[i]<mid do inc(i);
while qi[j]>mid do dec(j);
if i<=j then
begin
temp:=qi[i]; qi[i]:=qi[j]; qi[j]:=temp;
temp:=mo[i]; mo[i]:=mo[j]; mo[j]:=temp;
temp:=zh[i]; zh[i]:=zh[j]; zh[j]:=temp;
inc(i); dec(j);
end;
end;
if i<t then qsort(i,t);
if j>s then qsort(s,j);
end;
Begin
assign(input,'hardest.in'); reset(input);
assign(output,'hardest.out'); rewrite(output);
readln(w);
for l:=1 to w do begin
fillchar(qi,sizeof(qi),0);
fillchar(mo,sizeof(mo),0);
fillchar(zh,sizeof(zh),0);
fillchar(f,sizeof(f),0);
readln(n,m);
for i:=1 to m do begin
readln(x,y,z);
qi[2*i-1]:=x; mo[2*i-1]:=y; zh[2*i-1]:=z;
qi[2*i]:=y; mo[2*i]:=x; zh[2*i]:=z;
end;
qsort(1,2*m);
f[qi[1]]:=1; f[n+1]:=2*m+1;
for i:=2 to 2*m do
if qi[i]<>qi[i-1] then f[qi[i]]:=i;
for i:=n downto 1 do
if f[i]=0 then f[i]:=f[i+1];
fillchar(q,sizeof(q),0);
fillchar(t,sizeof(t),false);
for i:=1 to 200 do dist[i]:=10000000;
head:=0; tail:=1;
q[1]:=1; t[1]:=true; dist[1]:=0;
while head<=tail do begin
inc(head); xx:=q[head];
for i:=f[xx] to f[xx+1]-1 do
if dist[mo[i]]>dist[xx]+zh[i] then begin
dist[mo[i]]:=dist[xx]+zh[i];
if t[mo[i]]=false then begin
t[mo[i]]:=true;
inc(tail);
q[tail]:=mo[i];
end;
end;
t[xx]:=false;
end;
if dist[n]=10000000 then writeln('-1') else writeln(dist[n]);
end;
close(input);
close(output);
End.