Cây đường đi ngắn nhất nhỏ nhất

Đề bài

Mô tả

Cho một đồ thị vô hướng liên thông có trọng số G=(V,E) với n đỉnh và m cạnh, cùng một đỉnh nguồn u.

Một cây đường đi ngắn nhất xuất phát từ u là một cây con của G (gồm đúng n đỉnh và một tập con các cạnh của G) sao cho với mọi đỉnh v, khoảng cách từ u đến v trong cây bằng đúng khoảng cách ngắn nhất từ u đến v trong đồ thị ban đầu.

Trong tất cả các cây đường đi ngắn nhất xuất phát từ u, hãy tìm cây có tổng trọng số các cạnh nhỏ nhất.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm: số đỉnh và số cạnh.
  • m dòng tiếp theo, mỗi dòng chứa ba số nguyên ui, vi, wi: một cạnh nối hai đỉnh uivi với trọng số wi (uivi). Bảo đảm đồ thị liên thông và giữa hai đỉnh bất kỳ có tối đa một cạnh.
  • Dòng cuối chứa số nguyên u: đỉnh nguồn.

Dữ liệu ra

  • Dòng đầu in tổng trọng số nhỏ nhất của các cạnh trong cây.
  • Dòng thứ hai in chỉ số của các cạnh thuộc cây, cách nhau bởi dấu cách. Các cạnh được đánh số từ 1 theo thứ tự xuất hiện trong dữ liệu vào. Có thể in các chỉ số theo thứ tự bất kỳ.

Nếu có nhiều đáp án, in ra một đáp án bất kỳ.

Ràng buộc

  • 1n3·105
  • 0m3·105
  • 1wi109
  • 1un

Ví dụ

Input Output Giải thích
3 3
1 2 1
2 3 1
1 3 2
3
2
1 2
Có hai cây đường đi ngắn nhất từ đỉnh 3. Cây gồm cạnh 1 và 3 có tổng trọng số 3, cây gồm cạnh 1 và 2 có tổng trọng số 2. Chọn cây thứ hai.
4 4
1 2 1
2 3 1
3 4 1
4 1 2
4
4
4 2 3
Khoảng cách ngắn nhất từ 4 tới 1, 3, 2 lần lượt là 2, 1, 2. Cây gồm các cạnh 4, 2, 3 (tức 4-1, 2-3, 3-4) giữ nguyên mọi khoảng cách với tổng trọng số 2+1+1=4. Thứ tự các cạnh in ra là tùy ý.

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.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0