FOR i:=1 TO n DO
BEGIN
B[i]:=TRUE; D[i]:=1000000000;
Pos[i]:=0; Tr[i]:=0;
END;
Pos[Fir]:=1; HP[1]:=Fir; D[Fir]:=0; Top:=1;
REPEAT
u:=PopHP;
IF u=0 THEN Break;B[u]:=FALSE;
i:=HD[u];
WHILE i<>0 DO
BEGIN
v:=Adj[i];
Tam:=D[u]+Cost[i];
IF (Tam<D[v]) AND (B[v]) THEN
BEGIN
D[v]:=Tam;
Capnhat(v);
Tr[v]:=u;
END;
i:=link[i];
END;
UNTIL U=Fin;
Res:=D[Fin];