Nút cha chung (Chọn ĐTQG Phú Thọ 2013-2014 (ngày 2))
Xem dạng PDFCây là một cấu trúc dữ liệu quen thuộc trong tin học.
Ví dụ: ta có cây với 16 nút (hình dưới). Các nút được đánh số từ 1 đến 16. Nút 8 là gốc.

Nút ~x~ được gọi là nút cha của ~y~, nếu tồn tại một đường đi từ nút gốc tới ~y~ đi qua ~x~. Ví dụ: nút 4 là nút cha của nút 16, nút 10 cũng là nút cha của 16. Một nút đồng thời là nút cha của chính mình. Như vậy, các nút 8, 4, 10, 16 là nút cha của 16. Nút 10 được gọi là nút cha trực tiếp của nút 16.
Nút ~x~ được gọi là nút cha chung của hai nút khác nhau ~y~ và ~z~, nếu nó vừa là nút cha của ~y~, vừa là nút cha của ~z~. Ví dụ, các nút 8 và 4 đều là nút cha chung của các nút 7 và 16.
Nút ~x~ được gọi là nút cha chung gần nhất của ~y~ và ~z~, nếu nó là nút cha chung của hai nút này và trên đường đi từ ~x~ tới ~y~ không còn nút cha chung nào khác của ~y~ và ~z~. Ở cây đang xét, 4 là nút cha chung gần nhất của 7 và 16.
Yêu cầu: Hãy lập trình tìm nút cha chung gần nhất của hai nút khác nhau của một cây có ~n~ nút, các nút được đánh số từ 1 tới ~n~.
Dữ liệu
- Dòng 1 chứa 2 số nguyên dương ~n, k~ (~2 \le n \le 10000~, ~1 \le k \le n~), ~n~ là số nút của cây, ~k~ là nút gốc;
- Dòng ~i~ trong ~n-1~ dòng tiếp theo chứa 2 số nguyên dương ~u_i~ và ~v_i~ (~1 \le u_i, v_i \le n~), ~u_i~ là nút cha trực tiếp của ~v_i~;
- Dòng ~n+1~ chứa 2 số nguyên dương khác nhau ~y, z~ (~1 \le y, z \le n~) là 2 nút cần tìm nút cha chung gần nhất.
Kết quả
Một số nguyên dương duy nhất là nút cha chung gần nhất của ~y~ và ~z~.
Ví dụ
CAU6.INP
16 8
1 14
8 5
10 16
5 9
4 6
8 4
4 10
1 13
6 15
10 11
6 7
10 2
16 3
8 1
16 12
16 7
CAU6.OUT
4
Bình luận