记录编号 42837 评测结果 AAAAAAAA
题目名称 旅行计划 最终得分 100
用户昵称 Gravatar天下第一的吃货殿下 是否通过 通过
代码语言 Pascal 运行时间 0.004 s
提交时间 2012-09-30 20:22:56 内存使用 0.25 MiB
显示代码纯文本
var
 a,b,c,d,e,n,m,qd:longint;
 path,js,long:array[0..100,0..100] of longint;
 gs,min,bs:array[0..100] of longint;
 dl:array[0..2000] of longint;
 jl:array[0..100] of boolean;
       procedure spfa;
        var
            i,j,k,l,now,hd,lt:longint;
                begin
                  for i:=0 to n-1 do
                      min[i]:=maxlongint;
                   min[qd]:=0;
                   path[qd,1]:=qd;
                  hd:=1;
                  lt:=1;
                  dl[1]:=qd;
                  jl[qd]:=true;
                  bs[qd]:=1;
            while lt>=hd do
                  begin
                     now:=dl[hd];
                        for i:=1 to gs[now] do
                            if min[js[now,i]]>min[now]+long[now,js[now,i]]
                               then begin
                                  min[js[now,i]]:=min[now]+long[now,js[now,i]];
                                  path[js[now,i]]:=path[now];
                                  bs[js[now,i]]:=bs[now]+1;
                                  path[js[now,i],bs[js[now,i]]]:=js[now,i];
                                  if jl[js[now,i]]=false then
                                     begin
                                        inc(lt);
                                          if lt=n*2 then lt:=0;
                                        jl[js[now,i]]:=true;
                                        dl[lt]:=js[now,i];
                               end;
                        end;
                     jl[now]:=false;
                   inc(hd);
                     if hd=n*2 then
                   hd:=0;
        end;
end;
 begin
     assign(input,'djs.in');
        reset(input);
         assign(output,'djs.out');
         rewrite(output);
  readln(n,m,qd);
   for a:=1 to m do
       begin
         read(b,c,d);
         inc(gs[b]);
         js[b,gs[b]]:=c;
         long[b,c]:=d;
   end;
 spfa;
   for a:=0 to n-1 do
       begin
         writeln(a,':');
          if (min[a]=0) or (min[a]=maxlongint)
            then writeln('no')
               else begin
                 write('path:');
                  for b:=1 to bs[a] do
                   write(path[a,b],' ');
                 writeln;
                 write('cost:');
                 writeln(min[a]);
          end;
   end;
     close(input);
   close(output);
end.