Hướng dẫn giải của Dynamic Connectivity


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Chia các truy vấn thành ~\sqrt{n}~ nhóm, khi xét đến nhóm thứ ~i~:

  • hợp nhất các cạnh được thêm trước nhóm ~i~ mà có thời điểm xóa sau nhóm ~i~.

  • khi xét đến thao tác thứ ~j~ trong nhóm thứ ~i~, ta lưu những cạnh được thêm mà có thời điểm xóa nằm trong nhóm ~i~ và lớn hơn ~j~.

  • với mỗi cạnh ~(u, v)~ được lưu, gọi ~tplt(u)~ là chỉ số của thành phần liên thông chứa ~u~. Nếu ~u~ và ~v~ nằm ở 2 thành phần liên thông khác nhau ta thêm 1 cạnh giữa ~tplt(u)~ và ~tplt(v)~ trong đồ thị ảo.

Dễ thấy, khi này đáp án cho truy vấn chính là số thành phần liên thông trong cây DSU - (số đỉnh - số thành phần liên thông trong đồ thị ảo). Độ phức tạp ~O(n \times \sqrt{n})~


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.