Xoá cạnh giữ khoảng cách

Đề bài

Mô tả

Cho một đồ thị vô hướng, có trọng số, liên thông gồm n đỉnh và m cạnh. Gọi di là độ dài đường đi ngắn nhất từ đỉnh 1 đến đỉnh i.

Bạn cần xoá bớt một số cạnh sao cho đồ thị còn lại nhiều nhất k cạnh. Một đỉnh i được gọi là tốt nếu trong đồ thị sau khi xoá vẫn tồn tại một đường đi từ 1 đến i có độ dài đúng bằng di.

Hãy chọn các cạnh sẽ giữ lại sao cho số đỉnh tốt là lớn nhất có thể.

Dữ liệu vào

  • Dòng đầu chứa ba số nguyên n, m, k.
  • m dòng tiếp theo, dòng thứ i chứa ba số nguyên xi, yi, wi — mô tả cạnh thứ i nối hai đỉnh xiyi với trọng số wi.

Đồ thị đã cho liên thông và đơn (không có khuyên, không có cạnh bội).

Dữ liệu ra

  • Dòng đầu in một số nguyên e — số cạnh được giữ lại (0ek).
  • Dòng thứ hai in e số nguyên phân biệt từ 1 đến m — chỉ số (theo thứ tự nhập) của các cạnh được giữ lại. Số đỉnh tốt phải lớn nhất có thể.

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

Ràng buộc

  • 2n3·105
  • 1m3·105, n1m
  • 0km
  • 1xi,yin, xiyi
  • 1wi109

Ví dụ

Input Output Giải thích
3 3 2
1 2 1
3 2 1
1 3 3
2
1 2
Khoảng cách ngắn nhất từ 1d1=0, d2=1, d3=2. Giữ lại cạnh 1 (nối 12) và cạnh 2 (nối 32) cho ba đỉnh đều tốt.
4 5 2
4 1 8
2 4 1
2 1 3
3 4 9
3 1 5
2
3 2
Khoảng cách d1=0, d2=3, d3=5, d4=4. Với k=2 ta chỉ giữ được 2 cạnh — chọn cạnh 3 (nối 12) và cạnh 2 (nối 24) để các đỉnh 1,2,4 tốt.

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