Cod sursa(job #67596)

Utilizator adalLica Adela adal Data 25 iunie 2007 12:21:45
Problema Sate Scor 0
Compilator fpc Status done
Runda preONI 2007, Runda Finala, Clasa a 9-a si gimnaziu Marime 1.59 kb
program sate;
type rec1=record
  s,d,c,x1,x2:longint;
end;
var f,g:text;
    a:array[0..100030] of rec1;
    n,m,mx,x,y,i,j:longint;
function min(x,y:longint):longint;
begin
  if x<y then min:=x else min:=y;
end;
function max(x,y:longint):longint;
begin
  if x<y then max:=y else max:=x;
end;
begin
  assign(f,'sate.in'); reset(f);
  assign(g,'sate.out'); rewrite(g);
  readln(f,n,m,x,y);
  for i:=1 to m do readln(f,a[i].s,a[i].d,a[i].c);
  i:=1;
  while i<=(m-1) do begin
    j:=i+1; mx:=m;
    while j<=mx do begin
      if (a[i].s=a[j].s) and(i<>j) then begin
        inc(m); a[m].s:=min(a[i].d,a[j].d);
        a[m].d:=max(a[i].d,a[j].d);
        a[m].c:=abs(a[i].c-a[j].c);
        a[m].x1:=i; a[m].x2:=j;
        if (a[j].x1=i)or (a[j].x2=i) or(a[i].x1=j) or (a[i].x2=j) then dec(m);
      end;
      if (a[i].d=a[j].d)and(i<>j) then begin
        inc(m); a[m].s:=min(a[i].s,a[j].s);
        a[m].d:=max(a[i].s,a[j].s);
        a[m].c:=abs(a[i].c-a[j].c);
        a[m].x1:=i; a[m].x2:=j;
        if (a[j].x1=i)or (a[j].x2=i) or(a[i].x1=j) or (a[i].x2=j) then dec(m);

      end;
      if ((a[i].s=a[j].d) or(a[i].d=a[j].s)) and(i<>j) then begin
        inc(m); a[m].s:=min(a[i].s,a[j].s);
        a[m].d:=max(a[i].d,a[j].d);
        a[m].c:=a[i].c+a[j].c;
        a[m].x1:=i; a[m].x2:=j;
        if (a[j].x1=i)or (a[j].x2=i) or(a[i].x1=j) or (a[i].x2=j) then dec(m);

      end;
      inc(j);
      if (a[m].s=x) and(a[m].d=y) then j:=m+2;
    end;
    if (a[m].s=x) and(a[m].d=y) then i:=m+2;
    inc(i);
  end;
  writeln(g,a[m].c);
  close(f); close(g);
end.