Cod sursa(job #205895)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 3 septembrie 2008 14:16:15
Problema Triang Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.9 kb
var a,b:array[0..8000]of longint;
    c,d:array[0..8000]of real;
    n,i,j,k,m,w:longint;
    c1,c2,c3,ma:real;
    f:text;
begin
   assign(f,'ciclu.in');
   reset(f);
   read(f,n,m);
   for i:=1 to m do
   begin
   read(f,a[i],b[i],c[i]);
   if c[i]>ma then ma:=c[i];
   end;
   close(f);
   for i:=1 to n do
   begin
   a[m+i]:=0;
   b[m+i]:=i;
   c[m+i]:=0;
   end;
   m:=m+n;
   c1:=0;
   c2:=ma;
   while c2-c1>0.01 do
   begin
   c3:=(c1+c2)/2;
   for i:=1 to m-n do
   c[i]:=c[i]-c3;
   for i:=1 to n do
   d[i]:=200000000;
   w:=0;
   for i:=1 to n do
   for j:=1 to m do
   if d[b[j]]>d[a[j]]+c[j] then d[b[j]]:=d[a[j]]+c[j];
   for j:=1 to m do
   if d[b[j]]>d[a[j]]+c[j] then w:=1;
   if w=1 then c2:=c3
          else c1:=c3;
   for i:=1 to m-n do
   c[i]:=c[i]+c3;
   end;
   assign(f,'ciclu.out');
   rewrite(f);
   writeln(f,c1:0:2);
   close(f);
end.