canuc80k6104·5/33

Tập mã có trọng số

Nộp bài trên LQDOJ

Bài 61 · XOR Basis

Có loại quặng. Loại có mã phần tử và sức mạnh . Chọn một số loại quặng để tạo vật phẩm. Lựa chọn hợp lệ khi không tồn tại tập con không rỗng có XOR các mã phần tử bằng ; sức mạnh nhận được là tổng của các loại đã chọn.

Hãy tìm tổng sức mạnh lớn nhất của một lựa chọn hợp lệ.

Input

  • Dòng đầu chứa .
  • Mỗi trong dòng tiếp theo chứa mã và trọng số .

Output

  • In tổng trọng số lớn nhất của một tập mã độc lập.

Constraints

  • .
  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3
1 5
2 4
3 10

Output

15

Giải thích: Hai mã và độc lập và có tổng trọng số ; mã thuộc không gian do chúng sinh nên không thể thêm.

Lời giải tóm tắt
  • Mô hình: Có N loại quặng. Loại i có mã phần tử Number_i và sức mạnh Magic_i. Chọn một số loại quặng để tạo vật phẩm. Lựa chọn hợp lệ khi không tồn tại tập con không rỗng có XOR các mã phần tử bằng 0; sức mạnh nhận được là tổng Magic_i của các loại đã chọn.
  • Mô hình: Hãy tìm tổng sức mạnh lớn nhất của một lựa chọn hợp lệ.
  • Thuật toán: Sắp xếp các quặng theo Magic giảm dần. Duyệt theo thứ tự đó; thử chèn Number vào cơ sở. Nếu chèn thành công, lấy quặng và cộng sức mạnh; nếu phụ thuộc thì bỏ.
  • Thuật toán: Đây là greedy chuẩn trên matroid: ưu tiên phần tử trọng số cao, chỉ từ chối khi nó làm tập mất độc lập.
  • Chứng minh đúng: Các tập mã độc lập tuyến tính tạo thành một matroid: tập con của tập độc lập vẫn độc lập, và tính trao đổi cơ sở đúng trong không gian vector. Định lý greedy của matroid cho biết duyệt trọng số giảm dần và nhận phần tử nếu vẫn độc lập tạo một cơ sở độc lập có tổng trọng số lớn nhất. Có thể chứng minh bằng trao đổi: tại vị trí đầu tiên greedy chọn g mà nghiệm tối ưu không chọn, thêm g vào nghiệm tối ưu tạo một chu trình tuyến tính; bỏ một phần tử trong chu trình có trọng số không lớn hơn g để giữ độc lập mà không giảm tổng.
  • Độ phức tạp: Sắp xếp O(N log N), chèn O(N*64), bộ nhớ O(N).