Đườ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=1kwei−maxi=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 (2≤i≤n), 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 n và m 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 n−1 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

  • 2≤n≤5·104
  • 1≤m≤5·104
  • 1≤vi,ui≤n và vi≠ui
  • 1≤wi≤109
  • Đồ 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 1→2→3→5 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 7−4+1=4. Tương tự, tới đỉnh 2 dùng đường đi một cạnh 1→2 cho 1−1+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 1−5 trọng số 4 cho kết quả 4, nhưng đường dài hơn 1→3→2→5 với trọng số 1,3,1 lại tốt hơn: 5−3+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 1→7→4→2 có trọng số 4,1,1, cho 6−4+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.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