You are on page 1of 3

Nhận xét:

- Ta có LCA(x, y) = tổ tiên gần nhất của đỉnh x, y


trong đồ thị cây.
- Gọi h[i] là chiều cao của node i trong đồ thị cây.
- Giả sử ta xét A, B, C vào đỉnh s, f, t. Ta sẽ có 4
trường hợp.
- Trường hợp 1: LCA(f, s) == f và LCA(f, t) == f. Tức
là B sẽ là tổ tiên của A và B. Từ đó, ta có công
thức tổng quát là: ans = h[ LCA(s, t) ] - h[f] + 1.

Ví dụ: ở đây ta có s = 4, f = 1, t = 3. Vì f = 1 là tổ
tiên của 4, 3 (không xác định gần nhất) nên ta sẽ
có công thức là h[2] - h[1] = 2 - 1 + 1 = 2.
- Trường hợp 2: Nếu LCA(f, t) != LCA(f, s) tức là k
chung một đỉnh nào hết. Ta có công thức tổng quát
là h[f] - max(h[lca(f, t), h[lca(f, s)] + 1.

Ví dụ: giả sử s = 3, f = 4, t = 5. Dựa theo công


thức, ta sẽ có h[4] - max(h[2], h[1]) + 1 => h[4] -
h[2] + 1 = 2. Vì sao ở đây chúng ta lại max 2 cái
h[]. Bởi vì nếu chúng ta đi từ 3 ->4 -> 5 thì node bị
lặp lại 2 lần sẽ là 4 -> 2. Và nếu chúng ta đi từ 5 ->
4 -> 3. Thì chúng vẫn có số node bị đi qua 2 lần
vẫn là 4 -> 2. Đó chính là lý do t chọn max.
- Trường hợp 3: LCA(f, s) == LCA(f, t) != f.
Ta sẽ có công thức tổng quát là h[f] - h[ lca(f, s) ] +
h[lca(s, t)] - h[lca(f, s)].
Ví dụ: ở đây, s = 3, f = 4, t = 5. Ta sẽ lấy h[4] - h[6]
+ h[2] - h[6] + 1.
- Trường hợp 4: Nếu tất cả trường hợp trên không
thỏa mãn, tức là nó không đi qua cái nào 2 lần cả
thì chúng ta chỉ có node B là đi qua 2 lần từ đó
chúng ta sẽ in ra 1.

You might also like