Cod sursa(job #67599)
Utilizator | Data | 25 iunie 2007 12:29:23 | |
---|---|---|---|
Problema | Sate | Scor | 0 |
Compilator | fpc | Status | done |
Runda | preONI 2007, Runda Finala, Clasa a 9-a si gimnaziu | Marime | 6.09 kb |
program sate;
type interval=record
x,y:longint;
end;
var f,g:text;
a:array[1..501,1..501] of longint;
v:array[1..100000] of interval;
m,n:longint;
x,y,i,j:longint;
procedure int_nou(x,y:longint);
var x1,x2,y1,y2,i,j,aux,m1:longint;
begin
i:=m+1;
inc(m);
v[i].x:=x;
v[i].y:=y;
m1:=m;
for i:=m1 to m1 do
for j:=1 to m1-1 do
begin
if v[i].y=v[j].x then
if a[v[i].x,v[j].y]=-1 then
begin
a[v[i].x,v[j].y]:=a[v[i].x,v[i].y]+
a[v[j].x,v[j].y];
int_nou(v[i].x,v[j].y);
end;
x1:=v[i].x;
x2:=v[j].x;
if x1>x2 then
begin
aux:=x1;
x1:=x2;
x2:=aux;
end;
if v[i].y=v[j].y then
if a[x1,x2]=-1 then
begin
a[x1,x2]:=a[x1,v[i].y]-a[x2,v[i].y];
int_nou(x1,x2);
end;
y1:=v[i].y;
y2:=v[j].y;
if y1>y2 then
begin
aux:=y1;
y1:=y2;
y2:=aux;
end;
if v[i].x=v[j].x then
if a[y1,y2]=-1 then
begin
a[y1,y2]:=a[v[i].x,y2]-a[v[i].x,y1];
int_nou(y1,y2);
end;
if (v[i].x<=v[j].x)and(v[j].x<=v[i].y)and
(v[i].y<=v[j].y) then
if a[v[i].x,v[j].y]<>-1 then
if a[v[j].x,v[i].y]=-1 then
begin
a[v[j].x,v[i].y]:=a[v[i].x,v[i].y]+
a[v[j].x,v[j].x]-a[v[i].x,v[j].y];
int_nou(v[j].x,v[i].y);
end;
end;
end;
procedure iofile;
var m1,x1,x2,y1,y2,aux:longint;
begin
assign(f,'sate.in');
reset(f);
assign(g,'sate.out');
rewrite(g);
readln(f,n,m,x,y);
fillchar(a,sizeof(a),-1);
m1:=m;
for i:=1 to m1 do
begin
read(f,v[i].x,v[i].y);
readln(f,a[v[i].x,v[i].y]);
end;
close(f);
for i:=1 to m1-1 do
for j:=i+1 to m1 do
begin
if v[i].y=v[j].x then
if a[v[i].x,v[j].y]=-1 then
begin
a[v[i].x,v[j].y]:=a[v[i].x,v[i].y]+
a[v[j].x,v[j].y];
int_nou(v[i].x,v[j].y);
end;
x1:=v[i].x;
x2:=v[j].x;
if x1>x2 then
begin
aux:=x1;
x1:=x2;
x2:=aux;
end;
if v[i].y=v[j].y then
if a[x1,x2]=-1 then
begin
a[x1,x2]:=a[x1,v[i].y]-a[x2,v[i].y];
int_nou(x1,x2);
end;
y1:=v[i].y;
y2:=v[j].y;
if y1>y2 then
begin
aux:=y1;
y1:=y2;
y2:=aux;
end;
if v[i].x=v[j].x then
if a[y1,y2]=-1 then
begin
a[y1,y2]:=a[v[i].x,y2]-a[v[i].x,y1];
int_nou(y1,y2);
end;
if (v[i].x<=v[j].x)and(v[j].x<=v[i].y)and
(v[i].y<=v[j].y) then
if a[v[i].x,v[j].y]<>-1 then
if a[v[j].x,v[i].y]=-1 then
begin
a[v[j].x,v[i].y]:=a[v[i].x,v[i].y]+
a[v[j].x,v[j].x]-a[v[i].x,v[j].y];
int_nou(v[j].x,v[i].y);
end;
end;
end;
begin
iofile;
writeln(g,a[x,y]);
close(g);
end.