Editorial for Bedao Regular Contest 03 - PROTECT


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Author: bedao

Gọi các đỉnh bị chặn là đỉnh đen, các đỉnh không bị chặn là đỉnh trắng

Nhận xét 1: Mọi đỉnh trên cây đều có thể bị ảnh hưởng trừ đỉnh ~1~, đỉnh ~1~ có các con trực tiếp là: ~v_1~, ~v_2~, ~v_3~, ~\dots~, ~v_k~. Cây con gốc ~v_1, v_2, v_3, \dots, v_k~ gọi là các nhánh của cây con gốc ~1~. Giả sử như xóa ~1~ cạnh ở một nhánh bất kỳ, thì các đỉnh thuộc nhánh đó bao gồm cả đỉnh đen đều không thể đến được đỉnh ~1~ ( vì tất cả các cạnh trên cây đều là cầu ). Vì vậy, khi tìm số cạnh cần xóa là ít nhất, mỗi nhánh chỉ cần xóa nhiều nhất ~1~ cạnh và điều kiện để thực hiện xóa cạnh trên nhánh chính là trong nhánh phải có ít nhất ~1~ đỉnh đen.

Nhận xét 2: Khi đã xác định được số cạnh cần xóa là ít nhất, ta phải xác định được số đỉnh trắng mà sau khi xóa cạnh đi là ít nhất có thể. Ta thấy rằng thao tác xóa đi một cạnh ~(u,v)~ với ~u~ là cha của ~v~ chính là tách cây con gốc ~v~ ra khỏi cây con chứa gốc ~u~, mà cây con chứa gốc ~u~ này có gốc là đỉnh ~1~. Vậy số đỉnh trắng và đỉnh đen phải chắc chắn nằm trong hết cây con gốc ~v~ này.

Nhận xét 3: Để số đỉnh trắng và đỉnh đen nằm gọn trong cây con gốc ~v~, ta phải chọn đỉnh ~v~ là tổ tiên của mọi đỉnh trắng và đỉnh đen trong nhánh đang xét và để tối ưu số đỉnh trắng và đỉnh đen là ít nhất thì đỉnh ~v~ phải xa đỉnh ~1~ nhất, nói cách khác chính là tổ tiên chung gần nhất của các đỉnh trắng và đỉnh đen.

Thuật toán

  • Xem các đỉnh trên cây là một phần tử trong mảng, ta sẽ lần lượt đánh số các đỉnh trên cây bằng Euler Tour.
  • Duy trì một Set để quản lý các đỉnh đen ở trong nhánh, Set này chứa các phần tử là thứ tự đánh số của đỉnh bằng Euler Tour.
  • Từ Nhận xét 3, ta thấy tìm LCA của một tập đỉnh chính là đỉnh có số thứ tự nhỏ nhất được đánh số bằng Euler Tour trong tập đỉnh đó và lấy đỉnh có số thứ tự lớn nhất được đánh số bằng Euler Tour trong cùng tập đỉnh đang xét. Vậy áp dụng Nhận xét 3, ta thực hiện tìm LCA của các đỉnh trắng và đỉnh đen bằng cách lấy phần tử nhỏ nhất trong Set ( đỉnh có số thứ tự nhỏ nhất ) và lấy phần tử lớn nhất trong Set ( đỉnh có số thứ tự lớn nhất ).
  • Để tính số cạnh tối ưu, như ở Nhận xét 1, nếu nhánh hiện tại đang xét có ít nhất ~1~ đỉnh đen thì tăng đáp án lên ~1~.
  • Để tính số đỉnh trắng, ta thấy sau khi có đỉnh ~v~ tối ưu, ta sẽ tính số đỉnh trắng bằng cách lấy tổng số đỉnh thuộc cây con gốc ~v~ trừ đi số đỉnh đen.

Comments

Please read the guidelines before commenting.


There are no comments at the moment.