Mai intai trebuie sa te autentifici.
Cod sursa(job #387556)
Utilizator | Data | 27 ianuarie 2010 21:40:04 | |
---|---|---|---|
Problema | Distante | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 1.56 kb |
program pascal;
var a:array[0..50000,0..50000] of 0..1000;
s,d,d1:array[0..50000] of word;
n,i,j,r,min,poz,m:longint;
t,q:integer;
f,g:text;
procedure citire;
var p,o,c:longint;
begin
read(f,n,m,r);
for i:=1 to n do
read(f,d1[i]);
for i:=1 to m do
begin
read(f,p,o,c);
a[p,o]:=c;
a[o,p]:=c;
end;
end;
function identic:boolean;
begin
identic:=true;
for i:=1 to n do
if d1[i]<>d[i] then
begin
identic:=false;
break;
end;
end;
begin
assign(f,'distante.in');reset(f);
assign(g,'distante.out');rewrite(g);
read(f,t);
for q:=1 to t do
begin
citire;
s[r]:=1;
for i:=1 to n do
if (a[r,i]<>0)or(i=r) then
d[i]:=a[r,i]
else
d[i]:=50000000;
for i:=1 to n-1 do
begin
min:=50000000;
for j:=1 to n do
if s[j]=0 then
if d[j]<min then
begin
min:=d[j];
poz:=j;
end;
s[poz]:=1;
for j:=1 to n do
if (s[j]=0)and(a[poz,j]<>0) then
if d[j]>d[poz]+a[poz,j] then
d[j]:=d[poz]+a[poz,j];
end;
if identic then
writeln(g,'DA')
else
writeln(g,'NU');
end;
close(f);
close(g);
end.