Editorial for ROADRAIL - Thành phố liên thông


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.

Nguồn: https://beta.atcoder.jp/contests/arc065/tasks/arc065_b

Xét đồ thị chỉ gồm các tuyến đường bộ. Ta dùng DFS để đánh số các thành phần liên thông.

Gọi c1[u] là số thứ tự của thành phần liên thông chứa đỉnh u.

Tương tự, gọi c2[u] là số thứ tự của thành phần liên thông chứa đỉnh u, nếu xét đồ thị chỉ gồm các tuyến đường sắt.

Khi đó, hai thành phố u và v liên thông bằng đường bộ và liên thông bằng đường sắt khi và chỉ khi c1[u] = c1[v] và c2[u] = c2[v]

Ta có thể dùng cấu trúc dữ liệu map trong C++ (với mỗi khóa là một pair của giá trị c1 và c2 tương ứng với từng đỉnh) để thực hiện việc đếm trong độ phức tạp O(N log N).

Một cách khác là sắp xếp các đỉnh tăng dần theo c1, nếu bằng nhau thì tăng dần theo c2 và dùng hai con trỏ để thực hiện việc đếm.

Độ phức tạp của cách này cũng là ~O(N log N)~.


Comments

Please read the guidelines before commenting.


There are no comments at the moment.