Pagini recente » Cod sursa (job #2284524) | Cod sursa (job #2394925) | Cod sursa (job #2862489) | Cod sursa (job #1247284) | Cod sursa (job #342237)
Cod sursa(job #342237)
type ref=^nod;
nod=record
nr:longint;
adr:ref;
end;
ref2=^nod2;
nod2=record
nr,dist:longint;
adr:ref2;
end;
var a:array[1..30000] of ref2;
s:array[1..30000] of 0..1;
v,sf,u2,cost,cost2:ref;
u:ref2;
n,m,x,y,i,j,k,c:longint;
f,g:text;
ok:boolean;
begin
assign(f,'sate.in');
assign(g,'sate.out');
reset(f);rewrite(g);
readln(f,n,m,x,y);
for i:=1 to m do
begin
readln(f,j,k,c);
if a[j]=nil then
begin
new(a[j]);
a[j]^.nr:=k;
a[j]^.dist:=c;
a[j]^.adr:=nil;
end
else
begin
new(u);
u^.nr:=k;
u^.adr:=a[j];
u^.dist:=c;
a[j]:=u;
end;
if a[k]=nil then
begin
new(a[k]);
a[k]^.nr:=j;
a[k]^.dist:=c;
a[k]^.adr:=nil;
end
else
begin
new(u);
u^.nr:=j;
u^.adr:=a[k];
u^.dist:=c;
a[k]:=u;
end;
end;
new(v);
v^.nr:=x;
v^.adr:=nil;
s[x]:=1;
sf:=v;
new(cost);
cost^.nr:=0;
cost^.adr:=nil;
cost2:=cost;
repeat
u:=a[v^.nr];
while u<>nil do
begin
if s[u^.nr]=0 then
begin
s[u^.nr]:=1;
new(u2);
u2^.nr:=u^.nr;
u2^.adr:=nil;
sf^.adr:=u2;
sf:=u2;
new(u2);
if v^.nr<u^.nr then
u2^.nr:=cost^.nr+u^.dist
else
u2^.nr:=cost^.nr-u^.dist;
u2^.adr:=nil;
cost2^.adr:=u2;
cost2:=u2;
if u^.nr=y then
begin
ok:=true;
break;
end;
end;
u:=u^.adr;
end;
if ok=false then
begin
u2:=v^.adr;
dispose(v);
v:=u2;
u2:=cost^.adr;
dispose(cost);
cost:=u2;
end;
until ok=true;
write(g,cost2^.nr);
close(f);close(g);
end.