Cod sursa(job #1359953)

Utilizator mihai1996Toader Mihai mihai1996 Data 25 februarie 2015 10:15:45
Problema Algoritmul lui Euclid Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 2.04 kb
program info;
const fi='razboi.in';
      fo='razboi.out';
type li=record
   nod,val:longint;
    end;
var f,g:text;
    v:array of array of  li;
    bufin,bufout:array[1..1000] of char;
    n,m,a,b,c1,i,st,sf,nd,max,x,j,min,poz:longint;
    c,viz,s,v1,vmax:array[1..501] of longint;
    cd:array[1..30000] of longint;
begin

   assign(f,fi);
   reset(f);
   assign(g,fo);
   rewrite(g);
   settextbuf(f,bufin);
   settextbuf(f,bufout);
   read(f,n,m);
   setlength(v,n+1,1);

   for i:=1 to m do
     begin
      read(f,a,b,c1);
      inc(c[a]);
      setlength(v[a],c[a]+1);
      v[a,c[a]].nod:=b;
      v[a,c[a]].val:=c1;
     end;
     readln(f);  readln(f,x);

   max:=-maxlongint;  min:=maxlongint;
   for i:=1 to n do
      vmax[i]:=-maxlongint;

  for j:=1 to n do
   begin
    st:=0;
    sf:=1;
    for i:=1 to n do
      begin
        s[i]:=maxlongint;
        cd[i]:=0;
        viz[i]:=0;
      end;
    s[j]:=0;
    cd[1]:=j;
    viz[j]:=1;
    v1[1]:=1;
    while st<sf do
      begin
         inc(st);
         nd:=cd[st];
         viz[nd]:=0;
         for i:=1 to c[nd] do
           begin
            if s[nd]+v[nd,i].val<s[v[nd,i].nod] then
               begin
                 s[v[nd,i].nod]:=s[nd]+v[nd,i].val;
                 if viz[v[nd,i].nod]=0 then
                   begin
                     inc(sf);
                     cd[sf]:=v[nd,i].nod;
                     viz[v[nd,i].nod]:=1;
                   end;
                end;
           end;

       end;

       if s[x]>max then
          max:=s[x];

       for i:=1 to n do
          begin
              if s[i]>vmax[i] then
                 vmax[i]:=s[i];
          end;


  end;

  for i:=1 to n do
     if vmax[i]<min then
       begin
        min:=vmax[i];
        poz:=i;
       end;

   if max=maxlongint then
      writeln(g,0)
    else
       writeln(g,max);

       if min=maxlongint then
           writeln(g,0)
         else
           writeln(g,poz,' ',min);
   close(f);
   close(g);
end.