Dãy XOR tốt
Đề bài
Mô tả
Với một dãy các số nguyên không âm đôi một phân biệt , ta xác định dãy đó có tốt hay không theo cách sau:
- Dựng một đồ thị vô hướng gồm đỉnh, đỉnh thứ mang giá trị .
- Với mỗi từ đến : tìm chỉ số (, ) sao cho là nhỏ nhất trong tất cả các lựa chọn (ở đây là phép XOR nhị phân). Sau đó thêm một cạnh nối đỉnh với đỉnh .
- Dãy được gọi là tốt khi và chỉ khi đồ thị thu được tạo thành một cây (liên thông và không có chu trình đơn).
Do các giá trị phân biệt nên với mỗi , chỉ số làm nhỏ nhất là duy nhất. Có thể xảy ra trường hợp một cạnh giữa và được thêm hai lần (một lần khi xét , một lần khi xét ); khi đó cạnh này chỉ được tính một lần.
Cho một dãy gồm các số nguyên không âm đôi một phân biệt. Bạn được phép xoá bớt một số phần tử (có thể không xoá phần tử nào) để phần còn lại của dãy trở thành dãy tốt. Hãy tìm số phần tử ít nhất cần xoá.
Có thể chứng minh rằng với mọi dãy, ta luôn xoá được một số phần tử sao cho còn lại ít nhất phần tử và dãy còn lại là dãy tốt. Các phần tử bị xoá không tham gia vào quá trình xác định dãy tốt của phần còn lại.
Dữ liệu vào
- Dòng đầu: số nguyên , độ dài của dãy.
- Dòng thứ hai: số nguyên phân biệt .
Dữ liệu ra
- Một số nguyên duy nhất: số phần tử ít nhất cần xoá để dãy còn lại trở thành dãy tốt.
Ràng buộc
- Các giá trị đôi một phân biệt.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 5 0 1 5 2 6 |
1 | Dãy không tốt (không thể đi từ tới ). Chỉ cần xoá phần tử , dãy còn lại là dãy tốt, nên đáp án là . |
| 7 6 9 8 7 3 5 2 |
2 | Cần xoá tối thiểu phần tử để phần còn lại trở thành dãy tốt. |
Bình luận