Cod sursa(job #6139)

Utilizator CezarMocanCezar Mocan CezarMocan Data 17 ianuarie 2007 20:45:47
Problema Distante Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.3 kb
const inf=100000;
var ma,zero:array[1..100,1..100]of longint;
    mark,v,rez,zerov:array[1..100]of longint;
    n,m,a,b,c,i,j,p,min,t,k:longint;
    ok:boolean;
begin
assign(input,'distante.in');reset(input);
assign(output,'distante.out');rewrite(output);
readln(t);
for k:=1 to t do
begin
ma:=zero;
v:=zerov;
mark:=zerov;
readln(n,m,p);
for i:=1 to n do
        read(rez[i]);
for i:=1 to 100 do
        for j:=1 to 100 do
                ma[i,j]:=inf;
for i:=1 to 100 do
        v[i]:=inf;
for i:=1 to m do
        begin
        readln(a,b,c);
        ma[a,b]:=c;
        ma[b,a]:=c;
        end;
mark[p]:=1;
for i:=1 to n do
        v[i]:=ma[p,i];
ok:=true;
for j:=1 to n-1 do
        begin
        min:=1;
        for i:=2 to n do
                if (mark[i]=0)and(v[i]<v[min]) then
                        min:=i;
        mark[min]:=1;
        for i:=1 to n do
                if mark[i]=0 then
                        if v[i]>v[min]+ma[min,i] then
                                v[i]:=v[min]+ma[min,i];
        end;
for i:=1 to n do
        if v[i]=inf then
                v[i]:=0;
ok:=true;
for i:=1 to n do
        if v[i]<>rez[i] then
                ok:=false;
if ok then
        writeln('DA')
else
        writeln('NU');
end;
close(input);close(output);
end.