trang chủ / đề bài / gr07_toall

Bệnh viện gần nhất

Đề bài

Mô tả

Một thành phố có n nút giao thông đánh số từ 1 đến n và m con đường một chiều; con đường thứ i đi từ ui tới vi và dài wi. Có thể có đường từ một nút về chính nó và nhiều đường giữa cùng một cặp nút.

Có k nút đặt bệnh viện. Với mỗi nút v, hãy tìm độ dài đường đi ngắn nhất từ v tới một bệnh viện (đi đúng chiều các con đường) và cho biết đó là bệnh viện nào. Nếu có nhiều bệnh viện cùng gần nhất, chọn bệnh viện đặt ở nút có số thứ tự nhỏ nhất. Nếu v là bệnh viện thì khoảng cách bằng 0 và bệnh viện là chính v.

Dữ liệu vào

  • Dòng đầu tiên chứa ba số nguyên n, m, k.
  • Dòng thứ hai chứa k số nguyên khác nhau: các nút có bệnh viện.
  • m dòng tiếp theo, dòng thứ i chứa ba số nguyên ui,vi,wi.

Dữ liệu ra

In ra n dòng, dòng thứ v gồm hai số: độ dài đường đi ngắn nhất từ v tới bệnh viện gần nhất và nút đặt bệnh viện đó; hoặc −1 nếu từ v không tới được bệnh viện nào.

Ràng buộc

  • 1≤k≤n≤5·104
  • 0≤m≤105
  • 1≤ui,vi≤n
  • 1≤wi≤109

Ví dụ

Input Output Giải thích
5 5 2
2 5
1 2 7
1 3 2
3 5 2
2 4 1
5 4 1
4 5
0 2
2 5
-1
0 5
Từ nút 1: tới bệnh viện 5 qua nút 3 dài 4, tới bệnh viện 2 dài 7. Nút 4 không có đường đi ra nên không tới được bệnh viện nào, dù có đường từ hai bệnh viện đi tới nó.
6 5 2
4 1
2 1 3
2 4 3
3 2 1
5 4 2
6 6 1
0 1
3 1
4 1
0 4
2 4
-1
Từ nút 2, hai bệnh viện 1 và 4 cùng cách 3, chọn bệnh viện 1.

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