program micammino;
const MAX = 200000;
QSIZE = 400000;
var N, M,a,b,c,h,i: int64;
graph : array[0..MAX-1] of array of int64;
peso : array[0..MAX-1] of array of int64;
gsize, gcapa: array[0..MAX-1] of int64;
visited : array[0..MAX-1] of boolean;
D, S,E,P : array[0..MAX-1] of int64;
q1, q2 : array[0..QSIZE-1] of int64;
procedure mincammino(partenza:int64; arrivo:int64; var D : array of int64);
var qhead, qcount, first, second, i, j : int64;
begin
for h:=0 to N-1 do
begin
setlength(graph[h], 1);
setlength(peso[h], 1);
gsize[h] := 0;
gcapa[h] := 1;
D[h] := maxlongint;
end;
q1[0] := partenza; q2[0] := 0;
qhead := 0; qcount := 1;
for i:=0 to N-1 do visited[i] := False;
while qcount > 0 do
begin
first := q1[qhead];
second := q2[qhead];
inc(qhead);
if qhead = QSIZE then
qhead := 0;
dec(qcount);
if (visited[first]=true) then
begin
if second<D[first] then D[first]:=second
else continue;
end;
visited[first] := True;
D[first] := second;
for j:=0 to gsize[first]-1 do
begin
q1[(qhead + qcount) mod QSIZE] := graph[first][j];
q2[(qhead + qcount) mod QSIZE] := second + peso[first][j];
inc(qcount);
end;
end;
for h:=0 to M-1 do
begin
a := S[h]; b := E[h]; c:=P[h];
if gsize[a] = gcapa[a] then
begin
gcapa[a] := gcapa[a] shl 1;
setlength(graph[a], gcapa[a]);
setlength(peso[a], gcapa[a]);
end;
graph[a][gsize[a]] := b;
peso[a][gsize[a]] := c;
inc(gsize[a]);
end;
end;
begin
(*assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);*)
readln(N,M);
for h:=0 to M-1 do readln(S[h],E[h],P[h]);
mincammino(0,N-1,D);
for i:= 0 to N-1 do begin if D[i]=maxlongint then D[i]:=-1; write(D[i],' '); end;
end.
cHJvZ3JhbSBtaWNhbW1pbm87CmNvbnN0IE1BWCA9IDIwMDAwMDsKICAgICAgUVNJWkUgPSA0MDAwMDA7CnZhciBOLCBNLGEsYixjLGgsaTogaW50NjQ7CiAgICBncmFwaCA6IGFycmF5WzAuLk1BWC0xXSBvZiBhcnJheSBvZiBpbnQ2NDsKICAgIHBlc28gOiBhcnJheVswLi5NQVgtMV0gb2YgYXJyYXkgb2YgaW50NjQ7CiAgICBnc2l6ZSwgZ2NhcGE6IGFycmF5WzAuLk1BWC0xXSBvZiBpbnQ2NDsKICAgIHZpc2l0ZWQgOiBhcnJheVswLi5NQVgtMV0gb2YgYm9vbGVhbjsKICAgIEQsIFMsRSxQIDogYXJyYXlbMC4uTUFYLTFdIG9mIGludDY0OwogICAgcTEsIHEyIDogYXJyYXlbMC4uUVNJWkUtMV0gb2YgaW50NjQ7CgogCnByb2NlZHVyZSBtaW5jYW1taW5vKHBhcnRlbnphOmludDY0OyBhcnJpdm86aW50NjQ7IHZhciBEIDogYXJyYXkgb2YgaW50NjQpOyAKIHZhciBxaGVhZCwgcWNvdW50LCBmaXJzdCwgc2Vjb25kLCBpLCBqIDogaW50NjQ7CiAgIAogYmVnaW4KICAgCiAgIGZvciBoOj0wIHRvIE4tMSBkbwogICAgICAgYmVnaW4KICAgICAgICBzZXRsZW5ndGgoZ3JhcGhbaF0sIDEpOyAKICAgICAgICBzZXRsZW5ndGgocGVzb1toXSwgMSk7CiAgICAgICAgZ3NpemVbaF0gOj0gMDsKICAgICAgICBnY2FwYVtoXSA6PSAxOwogICAgICAgIERbaF0gOj0gbWF4bG9uZ2ludDsKICAgICAgZW5kOwogICAgICBxMVswXSA6PSBwYXJ0ZW56YTsgcTJbMF0gOj0gMDsKICAgcWhlYWQgOj0gMDsgcWNvdW50IDo9IDE7CiAgIGZvciBpOj0wIHRvIE4tMSBkbyB2aXNpdGVkW2ldIDo9IEZhbHNlOwogICB3aGlsZSBxY291bnQgPiAwIGRvCiAgICAgICBiZWdpbgogICAgICAgICBmaXJzdCA6PSBxMVtxaGVhZF07CiAgICAgICAgIHNlY29uZCA6PSBxMltxaGVhZF07CiAgICAgICAgIGluYyhxaGVhZCk7CiAgICAgICAgIGlmIHFoZWFkID0gUVNJWkUgdGhlbgogICAgICAgICBxaGVhZCA6PSAwOwogICAgICAgICBkZWMocWNvdW50KTsKICAgICAgICAgaWYgKHZpc2l0ZWRbZmlyc3RdPXRydWUpIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWNvbmQ8RFtmaXJzdF0gdGhlbiBEW2ZpcnN0XTo9c2Vjb25kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIHZpc2l0ZWRbZmlyc3RdIDo9IFRydWU7CiAgICAgICAgIERbZmlyc3RdIDo9IHNlY29uZDsKICAgICAgICAgZm9yIGo6PTAgdG8gZ3NpemVbZmlyc3RdLTEgZG8KICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICBxMVsocWhlYWQgKyBxY291bnQpIG1vZCBRU0laRV0gOj0gZ3JhcGhbZmlyc3RdW2pdOwogICAgICAgICAgICAgICAgICBxMlsocWhlYWQgKyBxY291bnQpIG1vZCBRU0laRV0gOj0gc2Vjb25kICsgcGVzb1tmaXJzdF1bal07CiAgICAgICAgICAgICAgICAgIGluYyhxY291bnQpOwogICAgICAgICAgICAgICAgZW5kOwogICAgICAgZW5kOwogICAgZm9yIGg6PTAgdG8gTS0xIGRvCiAgICAgIGJlZ2luCiAgICAgICBhIDo9IFNbaF07IGIgOj0gRVtoXTsgYzo9UFtoXTsKICAgICAgIGlmIGdzaXplW2FdID0gZ2NhcGFbYV0gdGhlbgogICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgIGdjYXBhW2FdIDo9IGdjYXBhW2FdIHNobCAxOwogICAgICAgICAgICAgIHNldGxlbmd0aChncmFwaFthXSwgZ2NhcGFbYV0pOwogICAgICAgICAgICAgIHNldGxlbmd0aChwZXNvW2FdLCBnY2FwYVthXSk7CiAgICAgICAgICAgIGVuZDsKICAgICAgIGdyYXBoW2FdW2dzaXplW2FdXSA6PSBiOwogICAgICAgcGVzb1thXVtnc2l6ZVthXV0gOj0gYzsKICAgICAgIGluYyhnc2l6ZVthXSk7CiAgICAgZW5kOyAgCiBlbmQ7CmJlZ2luCiAoKmFzc2lnbihpbnB1dCwgICdpbnB1dC50eHQnKTsgIHJlc2V0KGlucHV0KTsKICBhc3NpZ24ob3V0cHV0LCAnb3V0cHV0LnR4dCcpOyByZXdyaXRlKG91dHB1dCk7KikKICByZWFkbG4oTixNKTsgCiAgZm9yIGg6PTAgdG8gTS0xIGRvIHJlYWRsbihTW2hdLEVbaF0sUFtoXSk7CiAgbWluY2FtbWlubygwLE4tMSxEKTsKICBmb3IgaTo9IDAgdG8gTi0xIGRvICBiZWdpbiBpZiBEW2ldPW1heGxvbmdpbnQgdGhlbiBEW2ldOj0tMTsgIHdyaXRlKERbaV0sJyAnKTsgZW5kOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKZW5kLgogCgo=