Cod sursa(job #248731)

Utilizator valytgjiu91stancu vlad valytgjiu91 Data 26 ianuarie 2009 19:17:02
Problema Sate Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.58 kb
type elem=record
            x,y,z:longint;
            end;
var f,g:text;
 c:array[1..100000] of elem;
 pc,uc,n,i,j,m,x,y:longint;
  q:boolean;

function min(a,b:longint):longint;
begin
if a>b then min:=b
       else min:=a;
end;

function max(a,b:longint):longint;
begin
if a>b then max:=a
      else max:=b;
end;

begin
assign(f,'sate.in');
reset(f);
readln(f,n,m,x,y);
for i:=1 to m do
   readln(f,c[i].x,c[i].y,c[i].z);
pc:=1;
uc:=m;
q:=true;
while q do
  begin
    for i:=pc+1 to uc do
          begin
        if c[i].x=c[pc].x then
           begin
              m:=m+1;
              c[m].x:=min(c[i].y,c[pc].y);
              c[m].y:=max(c[i].y,c[pc].y);
              c[m].z:=abs(c[i].z-c[pc].z);
              end;
         if c[i].y=c[pc].y then
           begin
              m:=m+1;
              c[m].x:=min(c[i].x,c[pc].x);
              c[m].y:=max(c[i].x,c[pc].x);
              c[m].z:=abs(c[i].z-c[pc].z);
              end;

           if c[i].x=c[pc].y then
             begin
              m:=m+1;
              c[m].x:=c[pc].x;
              c[m].y:=c[i].y;
              c[m].z:=abs(c[i].z+c[pc].z);
              end;
           if c[i].y=c[pc].x then
             begin
              m:=m+1;
              c[m].x:=c[i].x;
              c[m].y:=c[pc].y;
              c[m].z:=abs(c[i].z+c[pc].z);
              end;
        if (c[m].x=x) and (c[m].y=y)then begin q:=false;break;end;
         end;
    if not q then break;
  uc:=m;
  pc:=pc+1;
  end;
assign(g,'sate.out');
rewrite(g);
writeln(g,c[m].z);
close(g);
end.