trang chủ / đề bài / gr03_lexpath

Đường đi ngắn nhất nhỏ nhất

Đề bài

Mô tả

Cho một đồ thị vô hướng gồm n đỉnh đánh số từ 1 đến n và m cạnh. Đồ thị có thể có khuyên và nhiều cạnh nối cùng một cặp đỉnh.

Trong tất cả các đường đi từ đỉnh 1 tới đỉnh n đi qua ít cạnh nhất, hãy tìm đường đi có dãy đỉnh nhỏ nhất theo thứ tự từ điển.

Dãy đỉnh a0,a1,…,ad nhỏ hơn dãy b0,b1,…,bd (cùng độ dài) theo thứ tự từ điển nếu tại vị trí i đầu tiên mà hai dãy khác nhau, ta có ai<bi.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên n và m.
  • m dòng tiếp theo, mỗi dòng chứa hai số nguyên u và v cho biết có một cạnh nối u và v.

Dữ liệu ra

  • Nếu không có đường đi từ 1 tới n, in ra một số −1.
  • Ngược lại, dòng thứ nhất in ra d là số cạnh trên đường đi ngắn nhất. Dòng thứ hai in ra d+1 đỉnh của đường đi cần tìm, bắt đầu bằng 1 và kết thúc bằng n, cách nhau bởi một dấu cách.

Ràng buộc

  • 1≤n≤2·105
  • 0≤m≤2·105
  • 1≤u,v≤n

Ví dụ

Input Output Giải thích
7 7
1 3
1 2
2 4
3 5
2 6
5 7
6 7
3
1 2 6 7
Có hai đường ngắn nhất: 1−2−6−7 và 1−3−5−7. Đường thứ nhất nhỏ hơn vì 2<3. Đỉnh 4 kề với 2 nhưng không dẫn tới 7.
5 5
1 4
4 5
1 2
2 3
3 5
2
1 4 5
Đường 1−2−3−5 bắt đầu bằng đỉnh nhỏ hơn nhưng dài hơn, nên không được tính.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0