Đồ Thị Động

Xem dưới dạng PDF

Gửi bài giải


Điểm: 20
Giới hạn thời gian: 3.0s
Giới hạn bộ nhớ: 256M
đầu vào: stdin
Đầu ra: stdout

Tác giả:
Kiểu bài tập

Nhóm nghiên cứu mạng tại FPTU xây dựng hệ thống giám sát liên thông cho đồ thị vô hướng \(N\) đỉnh, ban đầu không có cạnh nào.

Hệ thống nhận \(Q\) thao tác tuần tự:

  • add u v — Thêm cạnh không có hướng \((u, v)\) vào đồ thị. Đảm bảo cạnh \((u,v)\) chưa tồn tại tại thời điểm này.
  • remove u v — Xóa cạnh \((u, v)\) khỏi đồ thị. Đảm bảo cạnh \((u,v)\) đang tồn tại.
  • query u v — In YES nếu \(u\) và \(v\) hiện đang liên thông, NO nếu không.

Toàn bộ \(Q\) thao tác được đọc trước (offline). Mỗi cạnh sau khi thêm sẽ tồn tại cho đến khi bị xóa, và mỗi cạnh chỉ bị xóa đúng một lần.

Gợi ý: Xác định khoảng thời gian \([add, remove)\) của mỗi cạnh, sau đó áp dụng D&C trên thời gian + DSU Rollback.

Đị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 (add u v, remove u v, hoặc query u v).

Định dạng đầu ra

Với mỗi query u v, in YES hoặc NO trên một dòng riêng.

Ví dụ

Input:

5 8
add 1 2
add 2 3
query 1 3
add 1 3
query 1 3
remove 1 2
query 1 3
query 2 4

Output:

YES
YES
YES
NO

Giải thích:

  • Thêm 1–2, 2–3: tồn tại đường 1→2→3.
  • query 1 3YES.
  • Thêm 1–3: thêm cạnh trực tiếp 1–3 (cạnh dư, tạo chu trình).
  • query 1 3YES.
  • Xóa 1–2: còn cạnh 2–3 và 1–3. Đường 1→3→2 vẫn tồn tại.
  • query 1 3 → cạnh 1–3 trực tiếp → YES.
  • query 2 4 → đỉnh 4 không có cạnh nào → NO.

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\), \(u \ne v\).


Nhận xét

Không có ý kiến tại thời điểm này.