Cod sursa(job #796565)

Utilizator Buzu_Tudor_RoCont vechi Buzu_Tudor_Ro Data 11 octombrie 2012 20:32:02
Problema Distante Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.15 kb
Program p2;
var fi,fo:text;
    p:0..15;
    i,n,m,s:longint;
    a,b,c,q1,q2:array[0..50005] of longint;

Procedure dijkstra;
var i:longint; t:boolean;
begin
    t:=true;
    while t do begin
               t:=false;
               for i:=1 to m do
                   if (q2[a[i]]<>-1) and ((q2[b[i]]>q2[a[i]]+c[i]) or (q2[b[i]]=-1))
                         then begin
                              t:=true;
                              q2[b[i]]:=q2[a[i]]+c[i];
                              end;
               end;
    t:=true;
    for i:=1 to n do if (q1[i]<>q2[i]) then t:=false;
    if t=true then writeln(fo,'DA')
              else writeln(fo,'NU');

end;

begin
    assign(fi,'distante.in'); reset(fi);
    assign(fo,'distante.out'); rewrite(fo);
    readln(fi,p);

    for p:=1 to p do begin
                     readln(fi,n,m,s);
                     for i:=1 to n do begin read(fi,q1[i]); q2[i]:=-1; end;
                     q2[s]:=0;
                     for i:=1 to m do readln(fi,a[i],b[i],c[i]);
                     dijkstra;
                     readln(fi);
                     end;
    close(fi); close(fo);
end.