Pagini recente » Cod sursa (job #2167843) | Cod sursa (job #140386)
Cod sursa(job #140386)
type adresa=^nod;
nod= record
inf,dist:longint;
adr:adresa;
end;
var n,m,x,y,k,b,e,i,j:longint;
vc:array[1..30000]of adresa;
co:array[1..600000]of integer;
d:array[1..600000] of longint;
viz:array[1..30000]of boolean;
q,p:adresa;
procedure citire;
var d:longint;
begin
assign(input,'sate.in');
reset(input);
readln(n,m,x,y);
for k:=1 to n do
vc[k]:=nil;
for k:=1 to m do
begin
read(i,j,d);
new(q);
q^.inf:=i;
q^.dist:=d;
q^.adr:=vc[j];
vc[j]:=q;
new(q);
q^.inf:=j;
q^.dist:=d;
q^.adr:=vc[i];
vc[i]:=q;
end;
close(input);
end;
procedure rezolva;
var ok:boolean;
begin
co[1]:=x;
ok:=true;
b:=0;
e:=1;
while ok do
begin
b:=b+1;
p:=vc[co[b]];
while(p<>nil)do
begin
if(viz[p^.inf]=false)then
begin
e:=e+1;
if (p^.inf>co[b]) then
d[e]:=d[b]+p^.dist
else
d[e]:=d[b]-p^.dist;
co[e]:=p^.inf;
if(p^.inf=y)then
begin
ok:=false;
break;
end;
end;
p:=p^.adr;
end;
viz[co[b]]:=true;
end;
end;
procedure afisare;
begin
assign(output,'sate.out');
rewrite(output);
writeln(d[e]);
close(output);
end;
begin
citire;
rezolva;
afisare;
end.