比赛 |
20110722 |
评测结果 |
AWAAAAAAAWAAAAAWA |
题目名称 |
网络探测 |
最终得分 |
82 |
用户昵称 |
ZhouHang |
运行时间 |
0.000 s |
代码语言 |
Pascal |
内存使用 |
0.00 MiB |
提交时间 |
2011-07-22 11:39:42 |
显示代码纯文本
Program ping;
Const
inf = 'ping.in';
ouf = 'ping.out';
Var
n,m,t,ans : longint;
dis,pre : array [0..1020] of longint;
v : array [0..1020] of boolean;
list : array [0..100000] of longint;
a : array [0..1020,0..1020] of longint;
Procedure Init;
Var
i,j,x,y,z : longint;
Begin
readln(n,m,t);
for i := 0 to n-1 do
for j := 0 to n-1 do
a[i,j] := maxlongint div 2;
for i := 1 to m do
Begin
readln(x,y,z);
if z<a[x,y] then
begin
a[x,y] := z;
a[y,x] := z;
end;
End;
End;
Procedure Spfa;
Var
i,open,closd,tn : longint;
Begin
fillchar(list,sizeof(list),0);
fillchar(v,sizeof(v),false);
for i := 1 to n-1 do dis[i] := maxlongint div 2;
dis[0] := 0;
for i := 1 to n-1 do pre[i] := maxlongint;
pre[0] := 0;
list[1] := 0; v[0] := true;
open := 1; closd := 0;
while closd<open do
Begin
inc(closd);
v[closd] := false;
tn := list[closd];
for i := 0 to n-1 do
if dis[i]>dis[tn]+a[tn,i]
then begin
dis[i] := dis[tn]+a[tn,i];
pre[i] := tn;
if (not v[i]) then
begin
v[i] := true;
inc(open);
list[open] := i;
end;
end;
End;
End;
Procedure Findnum(t : longint);
Begin
if t=0 then exit
else inc(ans);
Findnum(pre[t]);
End;
Begin
Assign(input,inf); Reset(input);
Assign(output,ouf); Rewrite(output);
Init;
Spfa;
ans := 0;
Findnum(t);
if dis[t]=maxlongint div 2
then begin
writeln('no');
Close(input); Close(output);
Halt;
end;
if ans>=10
then writeln('no')
else writeln(dis[t]);
Close(input); Close(output);
End.