Cod sursa(job #557431)

Utilizator CalinRadu91Calin Radu Calin CalinRadu91 Data 16 martie 2011 17:40:44
Problema Distante Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.03 kb
var a:array[1..10000,1..10000]of -1..1000;
    ok:boolean;
    f,g:text;
    n,m,i,j,k,l,a1,a2,a3,nr,s:longint;
    x:array[1..100]of 0..10000;
begin
assign(f,'distante.in');
reset(f);
assign(g,'distante.out');
rewrite(g);
readln(f,nr);
for l:=1 to nr do
    begin
    readln(f,n,m,s);
    for i:=1 to n do read(f,x[i]);
    for i:=1 to n do
    for j:=1 to n do a[i,j]:=-1;
    a[s,s]:=0;
    readln(f);
    for i:=1 to m do
      begin
      readln(f,a1,a2,a3);
      a[a1,a2]:=a3;
      a[a2,a1]:=a3;
      end;
    for k:=1 to n do
      for i:=1 to n do
        for j:=1 to n do
         if (k<>i)and(k<>j) then
          if (a[i,j]=-1) then begin if (a[i,k]<>-1)and(a[k,j]<>-1) then begin a[i,j]:=a[i,k]+a[k,j]; a[j,i]:=a[i,j]; end; end
                      else if (a[i,k]<>-1)and(a[k,j]<>-1)and(a[i,k]+a[k,j]<a[i,j]) then a[i,j]:=a[i,k]+a[k,j];
    ok:=true;
    for i:=1 to n do if x[i]<>a[s,i] then ok:=false;
    if ok then writeln(g,'DA')
          else writeln(g,'NU');
    end;
close(f);
close(g);
end.