Cod sursa(job #67599)

Utilizator vanila0406Ionescu Victor vanila0406 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.