Cod sursa(job #21440)

Utilizator andrewgPestele cel Mare andrewg Data 23 februarie 2007 15:25:14
Problema Cc Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.97 kb
const maxn = 100;
      inf = 2000000000;

type punct = record
        x,y:longint;
     end;

var f:text;
    n,i,j,k,c,i0,j0,c0,li0,r,u,u0:longint;
    s:longint;
    a:array[1..maxn,1..maxn]of longint;
    d,v:array[1..maxn]of longint;

procedure readdata;
begin
   assign(f,'cc.in');
   reset(f);
   readln(f,n);
   for i:=1 to n do
   begin
      for j:=1 to n do
      begin
         read(f,a[i,j]);
      end;
   end;
   close(f);
end;

procedure solve;
begin
   d[1]:=1;
   v[1]:=1;
   s:=a[1,1];
   for k:=2 to n do
   begin
      li0:=a[1,k]+a[k,d[1]]-a[1,d[1]];
      i0:=1;
      c0:=d[i0];
      j:=d[i0];
      for i:=1 to k-1 do
      begin
         j:=d[i];
         r:=a[i,k]+a[k,j]-a[i,j];
         if r<li0 then
         begin
            li0:=r;
            i0:=i;
            j:=d[i];
            c0:=j;
            j0:=j;
         end;
         for c:=1 to k-1 do
         begin
            if (c<>j) then
            begin
               u:=v[c];
               r:=a[i,k]+a[k,c]-a[i,j]-a[u,c]+a[u,j];
               if (r<li0) then
               begin
                  li0:=r;
                  c0:=c;
                  i0:=i;
                  u0:=u;
                  j0:=j;
               end;
            end;
         end;
      end;
      if li0>=a[k,k] then
      begin
         s:=s+a[k,k];
         d[k]:=k;
         v[k]:=k;
      end
         else
      begin
         s:=s+li0;
         if c0=j0 then
         begin
            d[i0]:=k;
            d[k]:=c0;
            v[c0]:=k;
            v[k]:=i0;
         end
            else
         begin
            d[i0]:=k;
            v[k]:=i0;
            d[u0]:=j0;
            v[j0]:=u0;
            d[k]:=c0;
            v[c0]:=k;
         end;
      end;
   end;
end;

procedure writedata;
begin
   assign(f,'cc.out');
   rewrite(f);
   writeln(f,s);
   close(f);
end;

begin
   readdata;
   solve;
   writedata;
end.