trang chủ / đề bài / thhv19_clc_11_c

Đồ thị

Đề bài

Mô tả

Cho đồ thị n đỉnh (đánh số từ 1 đến n) và m cạnh. Trọng số của mỗi cạnh là không âm. Hãy xác định đường đi ngắn nhất từ đỉnh s cho trước tới mỗi đỉnh còn lại và độ dài của đường đi đó.

Mỗi cạnh (a,b,r) đi được theo cả hai chiều, từ a tới b và từ b tới a, với cùng trọng số r (ví dụ 1: từ đỉnh 2 tới đỉnh 1 đi qua cạnh "1 2 10"). Độ dài một đường đi là tổng trọng số các cạnh trên đường đi đó.

Yêu cầu: Tìm độ dài đường đi ngắn nhất từ đỉnh s đến các đỉnh còn lại và truy vết đường đi cho các đỉnh được yêu cầu.

Dữ liệu vào

  • Dòng đầu tiên chứa hai số nguyên n và m (n>0, m≥0).
  • Nếu m>0 thì mỗi dòng trong m dòng tiếp theo chứa ba số nguyên a,b,r cho biết có cạnh nối a với b có trọng số r (1≤a,b≤n, a≠b, 0≤r≤106). Không có hai dòng nào giống nhau (hai đỉnh vẫn có thể được nối bởi nhiều cạnh có trọng số khác nhau).
  • Dòng thứ m+2 chứa số nguyên s (1≤s≤n).
  • Dòng cuối cùng chứa số nguyên k và sau đó là k số nguyên c1,c2,…,ck (1≤ci≤n) cho biết phải dẫn xuất đường đi ngắn nhất từ s tới ci, i=1,2,…,k. Dữ liệu bảo đảm luôn có đường đi từ s tới mọi ci.

Dữ liệu ra

  • Dòng đầu tiên chứa n số nguyên, số thứ i là độ dài đường đi ngắn nhất từ s đến đỉnh i (số thứ s bằng 0). Độ dài bằng −1 nếu không tồn tại đường đi từ s đến đỉnh đó.
  • Dòng thứ i trong k dòng sau chứa thông tin về đường đi ngắn nhất từ s tới ci, có dạng TU DINH s to ci: v1 v2 ... vt, trong đó s và ci được thay bằng số hiệu đỉnh (ngay sau ci là dấu hai chấm), còn v1=s,v2,…,vt=ci là các đỉnh lần lượt trên đường đi, hai đỉnh liên tiếp được nối bởi một cạnh. Đường đi có không quá n đỉnh và có độ dài bằng độ dài đường đi ngắn nhất từ s tới ci. Nếu ci=s thì đường đi chỉ gồm đỉnh s.

Nếu có nhiều đường đi ngắn nhất, in ra đường đi bất kỳ.

Ràng buộc

  • 1≤n≤105, 0≤m≤105.
  • 1≤a,b≤n, a≠b, 0≤r≤106.
  • 1≤s≤n, 1≤k≤10, 1≤ci≤n, có đường đi từ s tới mọi ci.

Subtasks

Điểm được tính theo từng test.

  • 60% số test đầu tiên: n≤103, m≤103.
  • 40% số test còn lại: không có ràng buộc gì thêm.

Ví dụ

Input Output Giải thích
6 9
1 2 10
1 3 5
2 4 5
3 4 2
2 5 3
3 6 15
4 6 10
4 5 9
5 6 4
2
2 1 6
10 0 7 5 3 7
TU DINH 2 to 1: 2 1
TU DINH 2 to 6: 2 5 6
Từ đỉnh 2: tới đỉnh 3 đi 2→4→3 dài 5+2=7; tới đỉnh 6 đi 2→5→6 dài 3+4=7.
5 3
1 2 4
3 1 0
2 3 7
2
2 3 2
4 0 4 -1 -1
TU DINH 2 to 3: 2 1 3
TU DINH 2 to 2: 2
Ví dụ bổ sung (không có trong đề gốc). Tới đỉnh 3 đi 2→1→3 dài 4+0=4, ngắn hơn cạnh trực tiếp dài 7. Đỉnh 4 và 5 không có cạnh nào nên in −1. Với c2=s=2, đường đi chỉ gồm đỉnh 2.
1 0
1
1 1
0
TU DINH 1 to 1: 1
Ví dụ bổ sung (không có trong đề gốc). Đồ thị không có cạnh nào.

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