BOI 2015 - Tug of War

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: 2300 (p) Thời gian: 5.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Kéo co là môn thể thao rất phổ biến ở Byteland. Luật chơi rất đơn giản: hai đội kéo một sợi dây theo hai hướng ngược nhau. Giải kéo co từ thiện hằng năm của Byteland đang diễn ra và có rất nhiều người đăng ký. Với vai trò phụ trách tính công bằng, bạn cần chia những người tham gia thành hai đội để trận đấu có thể kéo dài.

Có tổng cộng \(2n\) người đăng ký, nên mỗi đội sẽ có \(n\) người. Sợi dây có \(n\) vị trí ở bên trái và \(n\) vị trí ở bên phải. Những tay kéo co hàng đầu Byteland khá kén chọn: mỗi người chỉ chấp nhận đúng một vị trí bên trái và đúng một vị trí bên phải. Bạn cũng biết sức mạnh của từng người.

Ban tổ chức đưa ra một số nguyên \(k\) và hỏi: có thể chia thành hai đội, mỗi đội có \(n\) người, sao cho mỗi người đứng ở một trong hai vị trí mình chấp nhận, không có hai người đứng cùng một vị trí, và tổng sức mạnh của hai đội chênh lệch không quá \(k\) hay không?

Dữ liệu vào

Dòng đầu chứa số nguyên dương \(n\), là số vị trí ở mỗi bên sợi dây, và số nguyên \(0\le k\le20n\), là độ chênh lệch sức mạnh tối đa được phép. Những người tham gia được đánh số từ \(1\) đến \(2n\).

Mỗi dòng trong \(2n\) dòng tiếp theo mô tả một người. Dòng thứ \(i\) chứa ba số nguyên dương \(l_i,r_i,s_i\) (\(1\le l_i,r_i\le n\), \(1\le s_i\le20\)), cho biết người \(i\) có sức mạnh \(s_i\) và muốn đứng ở vị trí \(l_i\) bên trái hoặc vị trí \(r_i\) bên phải sợi dây.

Dữ liệu ra

In YES nếu có thể tạo hai đội thỏa mãn tất cả các yêu cầu trên; ngược lại, in NO. Kết quả được in trên một dòng duy nhất.

Ràng buộc

  • \(1\le n\le30\,000\).
  • \(k\) là số nguyên và \(0\le k\le20n\).
  • \(1\le l_i,r_i\le n\)\(1\le s_i\le20\) với mọi \(1\le i\le2n\).

Phân nhóm

  1. 18 điểm: \(n\le10\).
  2. 30 điểm: \(n\le2000\).
  3. 23 điểm: \(n\le30\,000\)\(s_i=1\) với mọi \(1\le i\le2n\).
  4. 29 điểm: \(n\le30\,000\).

Ví dụ

Ví dụ 1

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

Có thể xếp những người \(1,3,6,7\) ở bên trái, tạo thành đội có tổng sức mạnh \(1+8+2+1=12\), và những người \(2,4,5,8\) ở bên phải, tạo thành đội có tổng sức mạnh \(2+2+5+2=11\). Độ chênh lệch sức mạnh giữa hai đội là \(1\).

Ví dụ 2

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

Hai người có sức mạnh \(4\) buộc phải ở cùng một đội, nên độ chênh lệch sức mạnh nhỏ nhất giữa hai đội là \(6\).

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: