JOI 2015 - Inheritance

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Ông JOI, một đại gia sở hữu toàn bộ đường sắt của quốc gia IOI, đã qua đời. Các tuyến đường sắt sẽ được chia thừa kế theo di chúc của ông.

Quốc gia IOI có \(N\) thành phố và \(M\) tuyến đường sắt. Các thành phố được đánh số từ \(1\) đến \(N\), các tuyến đường sắt được đánh số từ \(1\) đến \(M\). Tuyến \(i\) nối hai chiều thành phố \(A_i\)\(B_i\), đồng thời mang lại doanh thu \(C_i\) yên mỗi năm. Vì lượng hành khách và giá vé khác nhau, các giá trị \(C_1,\ldots,C_M\) đôi một khác nhau. Có thể có nhiều tuyến nối cùng một cặp thành phố.

Di chúc quy định cách chia thừa kế như sau:

  • Các tuyến đường sắt được chia cho \(K\) người con, đánh số từ \(1\) đến \(K\) theo thứ tự từ lớn tuổi đến nhỏ tuổi.
  • Mỗi người con thừa kế một số tuyến trong \(M\) tuyến, có thể là không tuyến nào.
  • Đầu tiên, người con \(1\) chọn một số tuyến làm phần thừa kế. Sau đó người con \(2\) chọn trong các tuyến còn lại, rồi tiếp tục như vậy đến người con \(K\).
  • Không ai được chọn một tuyến đã có người lớn tuổi hơn chọn.
  • Khi chọn phần của mình, mỗi người phải bảo đảm các tuyến mình nhận không chứa chu trình. Nói cách khác, nếu có thể dùng mỗi tuyến trong một tập các tuyến phân biệt đúng một lần để xuất phát và quay lại cùng một thành phố, thì không người con nào được thừa kế toàn bộ tập đó.
  • Các tuyến không ai nhận sẽ được hiến tặng cho quốc gia IOI.

Giống cha mình, mỗi người con đều tham lam và chọn phần thừa kế sao cho tổng doanh thu hằng năm lớn nhất có thể. Có thể chứng minh rằng đối với mỗi người, cách chọn đạt tổng doanh thu lớn nhất là duy nhất.

Yêu cầu

Hãy xác định người thừa kế của từng tuyến đường sắt.

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 \(A_i,B_i,C_i\).

Dữ liệu ra

In ra \(M\) dòng. Dòng thứ \(i\) chứa số hiệu người con thừa kế tuyến \(i\); nếu tuyến đó được hiến tặng cho quốc gia IOI, in ra 0.

Ràng buộc

  • \(2 \le N \le 1\,000\).
  • \(1 \le M \le 300\,000\).
  • \(1 \le K \le 10\,000\).
  • \(1 \le A_i,B_i \le N\)\(A_i \ne B_i\) với mọi \(1 \le i \le M\).
  • \(1 \le C_i \le 1\,000\,000\,000\) với mọi \(1 \le i \le M\).
  • \(C_i \ne C_j\) với mọi \(1 \le i<j \le M\).

Phân nhóm

  • Nhóm 1 (15 điểm): \(K \le 10\)
  • Nhóm 2 (85 điểm): Không có ràng buộc bổ sung

Ví dụ

Ví dụ 1

Input
3 5 2
1 2 3
1 2 1
2 3 4
2 3 6
1 3 2
Output
1
0
2
1
2
Giải thích
  • Người con \(1\) chọn các tuyến \(1\)\(4\), có tổng doanh thu \(3+6=9\), là lớn nhất có thể.
  • Người con \(2\) chọn các tuyến \(3\)\(5\) trong số các tuyến còn lại, có tổng doanh thu \(4+2=6\), là lớn nhất có thể.
  • Tuyến \(2\) còn lại được hiến tặng cho quốc gia IOI.

Ví dụ 2

Input
3 6 5
1 2 1
1 2 2
2 3 3
2 3 4
3 1 5
3 1 6
Output
4
3
2
1
2
1
Giải thích

Số tuyến được thừa kế có thể khác nhau giữa các người con. Có thể có người không thừa kế tuyến nào.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: