trang chủ / bài tập / compgraph

Hoàn thiện đồ thị

Đề bài

Mô tả

Cho một đồ thị vô hướng gồm n đỉnh được đánh số từ 0 đến n1m cạnh. Mỗi cạnh có một trọng số là số nguyên dương.

Một số trọng số đã bị xoá: các cạnh này được ghi trọng số bằng 0. Bạn cần gán lại cho mỗi cạnh bị xoá một trọng số nguyên dương (không vượt quá 1018) sao cho độ dài đường đi ngắn nhất giữa hai đỉnh st trong đồ thị thu được đúng bằng L.

Các cạnh có trọng số khác 0 phải giữ nguyên trọng số. Hãy xác định xem có cách gán như vậy hay không, và nếu có thì đưa ra một cách bất kỳ.

Giữa mỗi cặp đỉnh có nhiều nhất một cạnh.

Dữ liệu vào

  • Dòng đầu chứa năm số nguyên n, m, L, s, t.
  • m dòng tiếp theo, mỗi dòng chứa ba số nguyên ui, vi, wi mô tả một cạnh giữa đỉnh uivi có trọng số wi. Nếu wi=0 thì trọng số của cạnh này đã bị xoá.

Dữ liệu ra

Nếu không tồn tại cách gán thoả mãn, in ra một dòng duy nhất chứa NO.

Ngược lại, dòng đầu in ra YES. Tiếp theo in ra m dòng mô tả các cạnh của đồ thị kết quả: mỗi dòng gồm ba số ui, vi, wi. Tập cạnh phải trùng khớp với đồ thị ban đầu, các trọng số không bị xoá phải giữ nguyên, còn các trọng số mới là số nguyên dương không vượt quá 1018. Đường đi ngắn nhất giữa st phải có độ dài đúng bằng L.

Thứ tự các cạnh trong output không quan trọng. Nếu có nhiều đáp án, in ra một đáp án bất kỳ.

Ràng buộc

  • 2n1000
  • 1m10000
  • 1L109
  • 0s,tn1, st
  • 0ui,vin1, uivi
  • 0wi109

Ví dụ

Input Output Giải thích
5 5 13 0 4
0 1 5
2 1 2
3 2 3
1 4 0
4 3 4
YES
0 1 5
2 1 2
3 2 3
1 4 8
4 3 4
Chỉ có một cạnh bị xoá là (1,4). Gán trọng số 8 cho nó thì đường đi ngắn nhất từ 0 đến 4014 có độ dài 5+8=13.
2 1 999999999 1 0
0 1 1000000000
NO Không có cạnh nào bị xoá, đường đi ngắn nhất cố định bằng 109999999999.
2 1 123456789 0 1
0 1 0
YES
0 1 123456789
Chỉ có một cạnh duy nhất và nó bị xoá, nên chỉ có thể gán trọng số bằng đúng L.

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