Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - Với n <= 20 --> duyệt trâu nhị phân để làm
- - n > 20 :
- + n lớn để làm duyệt nhị phân
- + ta sẽ nghĩ đến việc chia cây thành các phần nhỏ hơn với mong muốn có thể duyệt nhị phân
- + trên 1 cái cây sẽ luôn tồn tại 1 điểm mà khi vứt đi điểm đó thì các thành phần liên thông khi cắt ra sẽ có số lượng
- phần tử <= n/2
- * Chứng minh : đi từ trên lá lên thì mình sẽ lấy node gần lá nhất mà số lượng con của nó > n/2, minh cắt nó đi, thì sẽ chia thành các thành phần liên thông. (điểm cắt gọi là u)
- + thành phần liên thông chứa cha của u --> chắc chắn sẽ có số con <= n/2 do số lượng con của u đã là > n/2 rồi.
- + thành phần liên thông chứa con của u --> giả sử mà nó có số con > n/2 thì thuật toán đã lấy nó thay vì lấy u.
- * Ta đã chia bài toán về các thành phần nhỏ hơn với số lượng nút trong 1 thành phần liên thông là <= 15 --> có thể duyệt nhị phân. Câu hỏi đặt ra là mình nối các bài toán lại ntn ?
- + Mình sẽ xét 2 trường hợp là đổi màu của đỉnh cắt và không đổi màu của đỉnh cắt
- + Trong cả 2 trường hợp đều xét với mỗi thành phần liên thông là 2 kiểu là :
- @ giá trị nhỏ nhất để đổi thành phần liên thông thành màu xanh sao cho không bấm vào nút kề với đỉnh cắt (array
- type0), và có bấm vào đỉnh cắt (array type1)
- @ nếu mà đỉnh cắt có màu đỏ thì số lượng mình lấy type1 sẽ là số lẻ lần, ngược lại là số chẵn lần
- @ cách xử lí thì mình cứ sort lại theo type1 - type0 rồi lấy
- * Note : trong bài của mình thì coi màu xanh là 0 còn màu đỏ là 1, ngược lại với đề nên mình đã đổi lại ở phần đọc
- * Note : Mạnh đọi có cách dp trên cây : coi mỗi đỉnh có trọng số riêng rồi dp trên cây (nó chưa chịu spoil cách làm), liên hệ Mạnh để biết thêm thông tin chi tiết
- LINK CODE : https://pastebin.com/Ks2EbEpR
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement