Đường đi nhỏ nhất

Đề bài

Mô tả

Cho một đồ thị vô hướng liên thông có trọng số gồm n đỉnh và m cạnh. Đồ thị không có khuyên và không có hai cạnh nối cùng một cặp đỉnh.

Trọng số của một đường đi gồm k cạnh mang chỉ số e1,e2,,ek được định nghĩa là

i=1kweimaxi=1kwei+mini=1kwei

với wj là trọng số của cạnh thứ j trong đồ thị. Nói cách khác, ta lấy tổng trọng số các cạnh trên đường đi, bỏ đi một lần cạnh nặng nhất và cộng thêm một lần cạnh nhẹ nhất.

Đường đi ở đây là một dãy cạnh nối tiếp nhau bất kỳ: một đỉnh hoặc một cạnh được phép xuất hiện nhiều lần. Nếu một cạnh được đi qua nhiều lần thì mỗi lần đi qua được tính là một phần tử riêng của dãy e1,e2,,ek.

Với mỗi i (2in), hãy tìm trọng số nhỏ nhất của một đường đi từ đỉnh 1 đến đỉnh i.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm là số đỉnh và số cạnh của đồ thị.
  • m dòng tiếp theo, dòng thứ i chứa ba số nguyên vi, ui, wi là hai đầu mút và trọng số của cạnh thứ i.

Dữ liệu ra

In ra n1 số nguyên: trọng số nhỏ nhất của đường đi từ đỉnh 1 đến đỉnh i, lần lượt với i=2,3,,n.

Ràng buộc

  • 2n5·104
  • 1m5·104
  • 1vi,uinviui
  • 1wi109
  • Đồ thị liên thông và không có hai cạnh nối cùng một cặp đỉnh.

Ví dụ

Input Output Giải thích
5 4
5 3 4
2 1 1
3 2 2
2 4 2
1 2 2 4 Đồ thị là một cây. Tới đỉnh 5 chỉ có một đường đi đơn 1235 với các trọng số 1,2,4: tổng là 7, cạnh nặng nhất là 4, cạnh nhẹ nhất là 1, nên trọng số bằng 74+1=4. Tương tự, tới đỉnh 2 dùng đường đi một cạnh 12 cho 11+1=1.
6 8
3 1 1
3 6 2
5 4 2
4 2 2
6 1 1
5 2 1
3 2 3
1 5 4
2 1 4 3 1 Tới đỉnh 5, đi thẳng bằng cạnh 15 trọng số 4 cho kết quả 4, nhưng đường dài hơn 1325 với trọng số 1,3,1 lại tốt hơn: 53+1=3. Đường đi ngắn nhất theo nghĩa thông thường không nhất thiết là đáp án.
7 10
7 5 5
2 3 3
4 7 1
5 3 6
2 7 6
6 2 6
3 7 6
4 2 1
3 1 4
1 7 4
3 4 2 7 7 3 Tới đỉnh 2: đường đi 1742 có trọng số 4,1,1, cho 64+1=3.

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.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0