Lưu Trữ Phiên Bản Dữ Liệu
Xem dưới dạng PDF
Gửi bài giải
Điểm:
15
Giới hạn thời gian:
2.0s
Giới hạn bộ nhớ:
256M
đầu vào:
stdin
Đầu ra:
stdout
Tác giả:
Kiểu bài tập
Một hệ thống quản lý dữ liệu phân tán hỗ trợ phiên bản hóa (versioning). Ban đầu có \(N\) phần tử, mỗi phần tử là một nhóm riêng biệt — đây là phiên bản \(0\).
Mỗi thao tác gộp nhóm tạo ra một phiên bản mới có số thứ tự tăng dần. Hệ thống cho phép quay lui về bất kỳ phiên bản cũ nào và tiếp tục thao tác từ đó — tương tự git checkout.
\(Q\) thao tác:
1 u v— Gộp nhóm chứa \(u\) và nhóm chứa \(v\) tại phiên bản hiện tại. Tạo phiên bản mới (số phiên bản tăng thêm 1). Nếu \(u\) và \(v\) đã cùng nhóm, không tạo phiên bản mới.2 k— Quay về phiên bản \(k\), loại bỏ toàn bộ thao tác từ phiên bản \(k+1\) trở đi. Đảm bảo \(0 \le k \le\) số phiên bản hiện tại.3 u v— Tại phiên bản hiện tại, \(u\) và \(v\) có cùng nhóm không? InYEShoặcNO.
Định dạng đầu vào
- Dòng 1: Hai số nguyên \(N\) và \(Q\) (\(1 \le N, Q \le 10^5\)).
- \(Q\) dòng tiếp theo, mỗi dòng là một thao tác như mô tả.
Định dạng đầu ra
Với mỗi thao tác 3 u v, in YES hoặc NO trên một dòng riêng.
Ví dụ
Input:
4 8
1 1 2
1 3 4
3 1 3
2 1
3 1 3
1 1 3
3 1 3
2 0
Output:
NO
NO
YES
Giải thích:
1 1 2: gộp {1,2} → phiên bản 1.1 3 4: gộp {3,4} → phiên bản 2.3 1 3: phiên bản 2, nhóm {1,2} và {3,4} khác nhau →NO.2 1: quay về phiên bản 1 (chỉ có nhóm {1,2}, số phiên bản hiện tại = 1).3 1 3: phiên bản 1, {1,2} và {3} khác nhau →NO.1 1 3: gộp {1,2} và {3} → phiên bản 2 (mới, ghi đè).3 1 3: phiên bản 2, cùng nhóm →YES.2 0: quay về phiên bản 0 (ban đầu, mọi phần tử đều riêng lẻ).
Ràng buộc
| Nhóm | \(N\) | \(Q\) |
|---|---|---|
| 1 (30%) | \(\le 10^3\) | \(\le 10^3\) |
| 2 (70%) | \(\le 10^5\) | \(\le 10^5\) |
\(1 \le u, v \le N\). Với thao tác 2 k: \(0 \le k \le\) số phiên bản hiện tại.
Nhận xét